Как выполнить обратный поиск строк в 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)))}
чтобы добавить к ответам Джерри и Джо, если вы хотите найти текст перед последним словом, которое вы можете использовать:
=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
и FIND
ing первый пробел. Впрочем, напоследок(!) слово 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)))))
копировать в столбец, выбрать этот столбец и главная > редактирование > найти и выбрать, заменить:
Заменить Все.
нет пробела после звездочки.
У меня также была такая задача, и когда я закончил, используя вышеуказанный метод, мне пришел новый метод: почему бы вам не сделать это:
- обратный строку ("строка один" становится "Ино gnirts").
- используйте старую добрую находку (которая жестко закодирована слева направо).
- снова превратите его в читаемую строку.
Как это звучит?