Формула MS Excel: поиск позиции / местоположения слова в строке - PullRequest
0 голосов
/ 31 января 2020

Используя формулу MS Excel (не VBA), я хотел бы найти фактическую позицию / местоположение определенного c слова, найденного в строке. Если это возможно, я бы хотел использовать функцию «Поиск и / или замена» вместо функции «Найти или заменить», поскольку текстовая строка не является буквенно-буквенной.

Ячейка A1 (текстовая строка): «Собака побежала за дом, а затем прыгнула через забор».
Ячейка B1: (Целевое ключевое слово): Ран
Ячейка C1 (Положение слова): 3

Заранее благодарим за помощь.

1 Ответ

2 голосов
/ 31 января 2020

Следующее даст вам индекс слова первого слова, которое содержит вашей подстроки:

=SEARCH(B1,A1)-LEN(SUBSTITUTE(LEFT(A1,SEARCH(B1,A1))," ",""))+1

Если у вас есть доступ к FILTERXML, вы можете получить его, бросив в некоторых MATCH, и это будет возвращать индекс слова для точного соответствия:

=MATCH(B1,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),0)

Примечание: Вторая формула должна быть введена через Ctrl Shift Enter

Что касается @BigBen, вы можете столкнуться с проблемной водой, если ваша строка содержит специальные символы, такие как запятая и тому подобное. В этом случае вы можете добавить больше вложенных SUBSTITUTE формул, чтобы позаботиться об этом сценарии.


Если вам нужно несколько совпадений и вы хотите, чтобы они были объединены в одну ячейку, вы ' Вам понадобится доступ к функции TEXTJOIN. Чтобы получить все словарные индексы слов, которые содержат вашу подстроку:

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH(B1,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"))),ROW(A1:INDEX(A:A,LEN(A1)-LEN(SUBSTITUTE(A1," ","")))),""))

Чтобы получить все точные совпадения, которые содержат значение поиска:

=TEXTJOIN(", ",TRUE,IF(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")=B1,ROW(A1:INDEX(A:A,LEN(A1)-LEN(SUBSTITUTE(A1," ","")))),""))

Примечание: Обе формулы необходимо вводить с помощью Ctrl Shift Введите

...