Как я могу выполнить обратный поиск строк в Excel без использования VBA?


У меня есть таблица Excel, содержащая список строк. Каждая строка состоит из нескольких слов, но количество слов в каждой строке разное.

используя встроенные функции Excel (без VBA), есть ли способ изолировать последнее слово в каждой строке?

примеры:

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!
14   142   2008-12-08 20:34:09

14 ответов:

этот тестируется и работает (на основе оригинального сообщения Брэда):

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
     LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

если исходные строки могут содержать символ pipe "/", то замените оба из приведенных выше символа другим символом, который не будет отображаться в вашем источнике. (Я подозреваю, что оригинал Брэда был сломан, потому что в переводе был удален непечатный символ).

Бонус: как это работает (справа налево):

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) - количество пробелов в оригинале строка
SUBSTITUTE(A1," ","|", ... ) – заменяет только финал пространство |
FIND("|", ... ) - находит абсолютное положение того, что заменено | (это был последний пробел)
Right(A1,LEN(A1) - ... )) – возвращает все символы после этого |

EDIT: чтобы учесть случай, когда исходный текст не содержит пробелов, добавьте в начало формулы следующее:

=IF(ISERROR(FIND(" ",A1)),A1, ... )

создание всей Формулы теперь:

=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
    SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))

или вы можете использовать =IF(COUNTIF(A1,"* *") синтаксис другой версии.

если исходная строка может содержать пробел в последней позиции, добавьте функцию обрезки при подсчете всех пробелов: сделайте функцию следующей:

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))

это техника, которую я использовал с большим успехом:

=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

чтобы получить первое слово в строке, просто измените справа налево

=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

кроме того, замените A1 ячейкой, содержащей текст.

более надежная версия ответа Джерри:

=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))

это работает независимо от длины строки, ведущих или конечных пробелов, или что-то еще, и это все еще довольно коротко и просто.

нашел этой на google, протестирован в Excel 2003 и он работает для меня:

=IF(COUNTIF(A1,"* *"),RIGHT(A1,LEN(A1)-LOOKUP(LEN(A1),FIND(" ",A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,LEN(A1),1))))),A1)

[edit] у меня недостаточно репутации для комментариев, поэтому это кажется лучшим местом...Ответ брэдка также не работает с конечными пробелами или пустыми ячейками...
[2nd edit] на самом деле, он также не работает для отдельных слов...

=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)

Это очень надежный-он работает для предложений без пробелов, ведущих / конечных пробелов, нескольких пробелов, нескольких ведущих / конечных пробелов... и я использовал char (7) для разделителя, а не вертикальную полосу "|" на всякий случай, если это нужный текстовый элемент.

Это очень чистый и компактный, и работает хорошо.

{=RIGHT(A1,LEN(A1)-MAX(IF(MID(A1,ROW(1:999),1)=" ",ROW(1:999),0)))}

это не ловушка ошибок для пробелов или одного слова, но это легко добавить.

Edit:
Это обрабатывает конечные пробелы, одно слово и пустые ячейки сценариев. Я не нашел способа сломать его.

{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW(:9),1)=" ",ROW(:9),0)))}
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 

чтобы добавить к ответам Джерри и Джо, если вы хотите найти текст перед последним словом, которое вы можете использовать:

=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))

С "My little cat" в A1 приведет к "My little" (где Джо и Джерри дадут "cat"

точно так же, как Джерри и Джо изолируют последнее слово, это тогда просто получает все слева от этого (затем обрезает его обратно)

представьте, что строка может быть отменено. Тогда это действительно легко. Вместо работы над строкой:

"My little cat" (1)

работы с

"tac elttil yM" (2)

С =LEFT(A1;FIND(" ";A1)-1) в A2 вы получаете "My" С (1) и "tac" С (2), которое отменено "cat" последнее слово в (1).

есть несколько VBAs вокруг, чтобы изменить строку. Я предпочитаю публичную функцию VBA ReverseString.

установить как описано выше. Тогда с вашим строка в A1, например,"My little cat" и эта функция в A2:

=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
  LEN(A1);(FIND(" ";ReverseString(A1))-1))))

вы увидите "cat" в A2.

метод выше предполагает, что слова разделены пробелами. Элемент IF предложение для ячеек, содержащих отдельные слова = без пробелов в ячейке. Примечание:TRIM и CLEAN исходная строка также полезна. В принципе он переворачивает всю строку из A1 и просто находит первый пробел в перевернутой строке, которая находится рядом с последним (обратным) словом (т. е., "tac "). LEFT выбирает это слово, и другой реверс строки восстанавливает исходный порядок слова (" cat"). Элемент -1 в конце FIND оператор удаляет пробел.

идея в том, что легко извлечь первый(!) слово в строке с LEFT и FINDing первый пробел. Впрочем, для последнего(!) слово то RIGHT функция является неправильным выбором, когда вы пытаетесь сделать это, потому что, к сожалению, найти не имеет флага для направления вы хотите проанализировать свою строку.

поэтому вся строка просто перевернута. LEFT и FIND работать как обычно, но извлеченная строка отменяется. Но это не имеет большого значения, как только вы знаете, как изменить строку. Первый ReverseString оператор в Формуле выполняет эту работу.

=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)

Я перевел на PT-BR, так как мне это тоже было нужно.

(обратите внимание, что я изменил пространство \ потому что мне нужно имя файла только из строк пути.)

=SE(ÉERRO(PROCURAR("\",A1)),A1,DIREITA(A1,NÚM.CARACT(A1)-PROCURAR("|", SUBSTITUIR(A1,"\","|",NÚM.CARACT(A1)-NÚM.CARACT(SUBSTITUIR(A1,"\",""))))))

другой способ добиться этого, как показано ниже

=IF(ISERROR(TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14))))),TRIM(D14),TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14)))))

enter image description here

копировать в столбец, выбрать этот столбец и главная > редактирование > найти и выбрать, заменить:

Find what:

Заменить Все.

нет пробела после звездочки.

У меня также была такая задача, и когда я закончил, используя вышеуказанный метод, мне пришел новый метод: почему бы вам не сделать это:

  1. переверните строку ("string one "становится"eno gnirts").
  2. используйте старую добрую находку (которая жестко закодирована слева направо).
  3. снова переверните его в читаемую строку.

Как это звучит?