Почему функция поиска работает только в сочетании с SUMPRODUCT при поиске нескольких строк? - PullRequest
0 голосов
/ 10 июня 2019

Я проверяю в Excel, находится ли текст в ячейке столбца внутри текста в другом столбце.

Пример текста для поиска:

Столбец А

 1. a
 2. b
 3. c

Текст для поиска в:

Колонка B

 1. aagg
 2. hgjk
 3. dhhd
 4. bahj
 5. adjd

Эта формула работает:

=SUMPRODUCT(--ISNUMBER(SEARCH(A$1:A$3,B1)))

Но этот работает только для первой ячейки, а для остальных я получаю # ЗНАЧЕНИЕ! Ошибка:

={(SEARCH(A$1:A$3,B1))}

Колонка B

  • aagg -> 1

  • hgjk -> # ЗНАЧЕНИЕ!

  • dhhd -> # ЗНАЧЕНИЕ!

  • bahj -> пустая ячейка

  • adjd -> пустая ячейка

Также вторая формула дает результаты только для первых трех ячеек, столько же, сколько и количество ячеек в столбце А. Последние две пустые.

Что заставляет SEARCH работать с SUMPRODUCT, но не может работать отдельно как формула массива?

1 Ответ

1 голос
/ 10 июня 2019

Предположим, у нас есть следующие данные ...

A1:A3

    a
    b
    c

B1

    oboe

В этом случае SEARCH (A $ 1: A $ 3, B1) возвращает следующий массив значений ...

#VALUE!
2
#VALUE!

Если формула вводится в одну ячейку, в эту ячейку передается только первое значение из этого массива.Итак, в этом случае, # ЗНАЧЕНИЕ!будет отображаться в ячейке.

Однако, если вы выберете три ячейки, затем введите формулу и подтвердите нажатием CTRL + SHIFT + ENTER, все три значения из массива будут перенесены в эти ячейки.

Обратите внимание, что, поскольку A1: A3 - это вертикальный диапазон ячеек, вам необходимо выбрать вертикальный диапазон ячеек, в который нужно вернуть эти значения.Например, вы можете выбрать D1: D3, а затем, когда эти три ячейки выбраны, ввести формулу, а затем подтвердить, нажав CTRL + SHIFT + ENTER.

Теперь для интересной части.Чтобы вернуть TRUE или FALSE, вам нужно сначала передать массив значений, возвращаемых SEARCH, в ISNUMBER, а затем вам нужно будет передать массив значений, возвращаемых ISNUMBER, в функцию OR, которая, в свою очередь, вернет TRUE, еслипо крайней мере одно из значений, возвращаемых ISNUMBER, имеет значение TRUE.В противном случае он возвращает FALSE.Итак, вы должны использовать следующую формулу, которая должна быть подтверждена с помощью CTRL + SHIFT + ENTER ...

=OR(ISNUMBER(SEARCH(A$1:A$3,B1)))

Вот как вычисляется формула ...

=OR(ISNUMBER(SEARCH(A$1:A$3,B1)))

=OR(ISNUMBER(SEARCH({"a";"b";"c"},"oboe")))

=OR(ISNUMBER({#VALUE!;2;#VALUE!}))

=OR({FALSE;TRUE;FALSE})

... который возвращает TRUE.Кстати, ISNUMBER здесь нужен.Мы не можем просто передать массив значений, возвращаемых SEARCH, в функцию OR.Если бы мы это сделали, функция OR вернула бы #VALUE !, так как массив значений содержит значение ошибки, в данном случае #VALUE !.Вот почему мы используем ISNUMBER, чтобы любое значение ошибки преобразовывалось в FALSE перед передачей ему функции OR.Таким образом, функция OR всегда будет получать массив значений, состоящий из TRUE и / или FALSE.

Надеюсь, это поможет!

...