Excel: поиск списка строк в определенной строке с использованием формул массива? - PullRequest
14 голосов
/ 29 ноября 2011

Я хочу найти в ячейке список слов.Я думал, что это будет работать как формула массива:

{=FIND(<list of words I want to search for>,<cell I want to search>)}

Но он находит совпадение только тогда, когда слово, которое находится в ячейке, которую я ищу, находится в первой строке списка слов, которые я ищуза.Есть ли способ написать формулу, которая просматривает весь список?И я бы предпочел, чтобы он не возвращал TRUE / FALSE.Я знаю, как искать в ячейке список слов и возвращать значение ИСТИНА / ЛОЖЬ в зависимости от того, существует ли слово в списке в ячейке.Я хочу на самом деле узнать, какое слово было найдено, или его положение.

Ответы [ 3 ]

28 голосов
/ 29 ноября 2011

Это вернет подходящее слово или ошибку, если совпадение не найдено.Для этого примера я использовал следующее.

Список слов для поиска: G1:G7
Ячейка для поиска в: A1

=INDEX(G1:G7,MAX(IF(ISERROR(FIND(G1:G7,A1)),-1,1)*(ROW(G1:G7)-ROW(G1)+1)))

Введите в виде формулы массиванажатие Ctrl + Shift + Enter .

Эта формула работает, сначала просматривая список слов, чтобы найти совпадения, затем записывая положениеслова в списке как положительное значение, если оно найдено, или как отрицательное значение, если оно не найдено.Наибольшее значение из этого массива - это позиция найденного слова в списке.Если слово не найдено, в функцию INDEX() передается отрицательное значение, что приводит к ошибке.

Чтобы вернуть номер строки соответствующего слова, вы можете использовать следующее:

=MAX(IF(ISERROR(FIND(G1:G7,A1)),-1,1)*ROW(G1:G7))

Это также необходимо ввести как формулу массива, нажав Ctrl + Shift + Enter .Он вернет -1, если совпадений не найдено.

2 голосов
/ 18 июня 2015

Добавление этого ответа для таких людей, как я, для которых ответ ИСТИНА / ЛОЖЬ вполне приемлем

OR(IF(ISNUMBER(SEARCH($G$1:$G$7,A1)),TRUE,FALSE))

или с учетом регистра

OR(IF(ISNUMBER(FIND($G$1:$G$7,A1)),TRUE,FALSE))

Где диапазон для условий поискаG1:G7

Не забудьте нажать CTRL + SHIFT + ENTER

0 голосов
/ 19 мая 2014
  1. Поместите ваш список слов в разделитель, который никогда не встречается в словах, например |
  2. поменяйте местами аргументы в вызове find - мы хотим выполнить поиск, если значение ячейки соответствует одному из слов в строке шаблона {=FIND("cell I want to search","list of words I want to search for")}
  3. если шаблоны похожи, есть риск получить больше результатов, чем хотелось бы, мы ограничиваем только правильные результаты, добавляя & "|" к проверенному значению ячейки (хорошо работает с формулами массива) ячейка G3 может содержать: {=SUM(FIND($A$1:$A$100&"|";A3))} это гарантирует, что электронная таблица будет сравнивать строки типа "cellvlaue |" againts "pattern1 |", "pattern2 |" и т. д., который разбирает конфликты, такие как pattern1 = "недавно добавленный", pattern2 = "добавленный" (сумма всех ячеек, соответствующих "добавленному", будет слишком высокой, включая целевые значения для ячеек, соответствующих "вновь добавленному", что будет логичным ошибка)
...