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

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

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

примеры:

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!

14 ответов


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

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

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

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

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] у меня недостаточно репутации для комментариев, поэтому это кажется лучшим местом...Ответ BradC также не работает с конечные пробелы или пустые ячейки...
[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.

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

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

поэтому вся строка просто перевернута. 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. обратный строку ("строка один" становится "Ино gnirts").
  2. используйте старую добрую находку (которая жестко закодирована слева направо).
  3. снова превратите его в читаемую строку.

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