Excel: поиск нескольких терминов в ячейке

Я использую это удобное уравнение для поиска термина внутри ячейки в Excel.

=IF(ISNUMBER(SEARCH("*Gingrich*",C1)),"1","")

Это уравнение ищет присутствие Гингрича в C1, если оно существует, оно отображает 1.

Все, что я хотел бы сделать, это искать более одного термина за раз. Кто-нибудь знает, как добавить сюда функцию ИЛИ, чтобы я мог искать Гингрича, ИЛИ Обаму, ИЛИ Ромни и т. д.?


person Chris J. Vargo    schedule 10.02.2013    source источник


Ответы (4)


Другой путь

=IF(SUMPRODUCT(--(NOT(ISERR(SEARCH({"Gingrich","Obama","Romney"},C1)))))>0,"1","")

Кроме того, если вы храните список значений, скажем, от A1 до A3, вы можете использовать

=IF(SUMPRODUCT(--(NOT(ISERR(SEARCH($A$1:$A$3,C1)))))>0,"1","")

Подстановочные знаки вообще не нужны в функции Search(), так как Search() возвращает позицию найденной строки.

person teylyn    schedule 11.02.2013
comment
Ух ты! Мне нравится, как просто вводить термины через запятую. Кроме того, может быть удобно ввести диапазон из другого места. Кому нужен набор инструментов для поиска, когда у вас есть Excel! - person Chris J. Vargo; 11.02.2013
comment
Отличное решение (даже если оно было на SO). Хотел бы я дважды проголосовать за это. Я только настроил его, чтобы получать значения из таблицы, а не из диапазона. Спасибо. - person dav; 31.08.2015
comment
Вместо использования NOT(ISERR( )) не будет ли достаточно более простого ISNUMBER( )? - person Iakovosian; 22.06.2016
comment
@teylyn, как мне вернуть найденную строку в другую строку? Я пытаюсь найти во всей строке несколько строк, если какая-либо из них найдена, поместите найденную в другую ячейку. Пример =СУММПРОИЗВ(--ISNUMBER(SEARCH({Adobe ,Microsoft ,google ,Office },G2)))›0 В этом случае, если adobe или любые другие 2 строки найдены, используйте это значение вместо TRUE. Спасибо - person Stryker; 19.04.2018
comment
@Stryker Задайте свой вопрос и разместите ссылку на него здесь. - person teylyn; 19.04.2018
comment
@stryker, не должно быть так сложно. Если результат приведенной выше формулы ИСТИНА, то верните C1 вместо 1 - person teylyn; 19.04.2018
comment
@teyln сделал и спасибо .. stackoverflow.com/questions/49945674/ - person Stryker; 20.04.2018
comment
Кажется, это не работает, когда столбец таблицы указывается в качестве второго аргумента функции SEARCH. - person Conner M.; 03.03.2020
comment
@КоннерМ. Второй аргумент функции поиска не может быть ссылкой на несколько ячеек, как столбец таблицы. Это может быть только литеральная строка или ссылка на одну ячейку. Вы не можете просто вставить что-либо в любой параметр и ожидать, что это сработает. Синтаксис имеет правила. - person teylyn; 03.03.2020
comment
@teylyn, очевидно, синтаксис имеет правила. Я попытался скопировать необработанный текст из одной ячейки таблицы и исключить его за пределы таблицы, но ПОИСК с использованием нескольких значений по-прежнему не возвращал массив значений. - person Conner M.; 03.03.2020

Попробуйте использовать функцию COUNT, как это

=IF(COUNT(SEARCH({"Romney","Obama","Gingrich"},C1)),1,"")

Обратите внимание, что вам не нужны подстановочные знаки (как говорит Тейлин), и если нет особой причины, «1» не нуждается в кавычках (фактически это делает его текстовым значением)

person barry houdini    schedule 11.02.2013
comment
Как я могу вернуть найденные значения вместо 1 или TRUE? - person Stryker; 19.04.2018

Это сделает это за вас:

=IF(OR(ISNUMBER(SEARCH("Gingrich",C3)),ISNUMBER(SEARCH("Obama",C3))),"1","")

Учитывая эту функцию в столбце справа от имен (которые находятся в столбце C), результат будет следующим:

Romney  
Gingrich    1
Obama       1
person Simon    schedule 11.02.2013
comment
Большое спасибо, я вижу, что простое добавление еще одного ISNUMBER и SEARCH работает просто отлично. - person Chris J. Vargo; 11.02.2013
comment
Я отредактировал свой ответ, чтобы удалить подстановочные знаки, которые не нужны, как предложил @teylyn. В этом случае ответы с несколькими терминами в SEARCH() лучше, и я проголосовал за них, но объединение нескольких тестов с OR() необходимо, когда отдельные тесты различаются, поэтому я оставил этот пример для других, которые могут найти его полезным. - person Simon; 11.02.2013

В дополнение к ответу @teylyn я хотел бы добавить, что вы можете поместить строку из нескольких условий поиска в ОДНУ ячейку (в отличие от использования другой ячейки для каждого условия, а затем использования этого диапазона в качестве аргумента для SEARCH), используя именованные диапазоны и функцию EVALUATE, как я нашел по этой ссылке.

Например, я помещаю следующие термины в виде текста в ячейку $G$1:

"PRB", "utilization", "alignment", "spectrum"

Затем я определил именованный диапазон с именем search_terms для этой ячейки, как описано в приведенной выше ссылке и показано на рисунке ниже:

Определение именованного диапазона

В поле Refers to: пишу следующее:

=EVALUATE("{" & TDoc_List!$G$1 & "}")

Приведенное выше выражение EVALUATE просто используется для эмуляции буквальной строки

{"PRB", "utilization", "alignment", "spectrum"}

для использования в качестве входных данных для функции SEARCH: использование прямой ссылки на ОДИНОЧНУЮ ячейку $G$1 (дополненную фигурными скобками в этом случае) внутри SEARCH не работает, поэтому использование именованных диапазонов и EVALUATE.

Хитрость теперь состоит в замене прямой ссылки на $G$1 EVALUATE-дополненным именованным диапазоном search_terms.

Формула

Это действительно работает и еще раз показывает, насколько на самом деле мощен Excel!

Это действительно работает!

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

person dirac bracket    schedule 20.12.2019