Поиск по нескольким условиям в Excel
Возможности !SEMTools
↑ Навигация по задачам в Excel и возможностям надстройки !SEMTools ↑

Проверить, совпадает ли ячейка с одним из нескольких значений, в Excel можно формулой =ИЛИ(A2=$E$2:$E$5), а содержит ли она хотя бы одно из слов списка — формулой =СЧЁТ(ПОИСК($E$2:$E$5;A2))>0. Найти строку сразу по нескольким условиям (город и товар) помогает связка =ИНДЕКС(C2:C6;ПОИСКПОЗ(1;(A2:A6=E2)*(B2:B6=F2);0)). Отметить ячейки, подходящие под любое из десятков условий, без формул можно процедурой !SEMTools.

Найти несколько значений в Excel за один заход - нетривиальная задача. Дело в том, что текстовый фильтр в автофильтре принимает максимум два условия. Расширенный фильтр умеет больше, но требует отдельной таблицы критериев.

Если же хочется использовать сразу несколько условий поиска (3,4,5 и т.д.), эта процедура не подходит.

Как правило, такое нужно для текстовых критериев (полное совпадение, начинается на, содержит, заканчивается на). Потому что для числовых значений двух критериев обычно достаточно.

Поиск нескольких слов и фраз в Excel

Если нужно найти не ячейки целиком, а отдельные слова или фразы внутри текста, смотрите статьи:

Поиск нескольких слов в Excel

Извлечь несколько слов из текста в Excel

Поиск нескольких фраз в Excel

Поиск нескольких значений по точному совпадению

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

=ИЛИ(A1=$E$1:$E$4)

Как работает:

  • Равенство в скобках (A1=$E$1:$E$4) проверяет, равно ли значение в ячейке A1 любому из значений в диапазоне $E$1:$E$4 и возвращает булевый массив (ИСТИНА-ЛОЖЬ)
  • Знак доллара $ в ссылке $E$1:$E$4 создает абсолютную ссылку, что означает, что при копировании формулы эта ссылка не будет меняться.
  • Функция ИЛИ возвращает ИСТИНА, если хотя бы одно из сравнений A1=E1, A1=E2, A1=E3 или A1=E4 дает результат ИСТИНА.
  • Если значение в ячейке A1 совпадает с любым значением из списка в E1:E4, формула вернет ИСТИНА. В противном случае будет возвращено ЛОЖЬ.
Совпадает ли ячейка с одним из значений
B3=ИЛИ(A3=$D$2:$D$5)
ABCD
1ГородЕсть в списке?Список
2МоскваИСТИНА=ИЛИ(A2=$D$2:$D$5)Москва
3ТверьЛОЖЬ=ИЛИ(A3=$D$2:$D$5)Казань
4КазаньИСТИНА=ИЛИ(A4=$D$2:$D$5)Самара
5ОмскЛОЖЬ=ИЛИ(A5=$D$2:$D$5)Пермь
6СамараИСТИНА=ИЛИ(A6=$D$2:$D$5)

Каждая ячейка столбца A сравнивается со всеми четырьмя городами из D2:D5. В Excel 2019 и раньше формулу вводят сочетанием Ctrl+Shift+Enter.

В английском Excel: =OR(A2=$D$2:$D$5)

Поиск нескольких значений в ячейках по полному совпадению.

Эта формула особенно полезна для проверки принадлежности значения к определенному списку допустимых значений.

Если важен учёт регистра символов, вместо обычного сравнения потребуется использовать функцию СОВПАД.

Найти частичное совпадение: ПОИСК и НАЙТИ

Если нам нужен текстовый поиск не по полному, а по частичному совпадению, в зависимости от типа поиска (начинается с, заканчивается на, содержит) нам потребуются разные формулы.

Все они используют функции ПОИСК и НАЙТИ. Разница функций лишь в том, что одна из них учитывает регистр, а другая - нет. Подробнее о них можно почитать в соответствующих статьях.

Ячейка содержит одно из значений

При обычном поиске нескольких значений ("содержит") нам потребуется такая формула:

=СЧЁТ(ПОИСК(B1:B10; A1))>0

Объяснение логики:

  • ПОИСК(B1:B10; A1) - ищет каждое значение из диапазона B1:B10 в ячейке A1 и возвращает массив чисел/ошибок.
  • СЧЁТ - считает числа в массиве
  • >0 - возвращает ИСТИНА если есть хотя бы одно число, ЛОЖЬ если чисел нет.
Ячейка содержит одно из значений
B2=СЧЁТ(ПОИСК($D$2:$D$4;A2))>0
ABCD
1ЗапросСодержит слово?Список
2купить ноутбук asusИСТИНА=СЧЁТ(ПОИСК($D$2:$D$4;A2))>0ноутбук
3чехол для телефонаИСТИНА=СЧЁТ(ПОИСК($D$2:$D$4;A3))>0планшет
4наушникиЛОЖЬ=СЧЁТ(ПОИСК($D$2:$D$4;A4))>0телефон

ПОИСК возвращает позицию для найденных слов и ошибку для остальных, СЧЁТ считает только числа. «телефона» подходит: ищется фрагмент, а не слово целиком.

В английском Excel: =COUNT(SEARCH($D$2:$D$4,A2))>0

Подобным способом, например, можно найти символы английского алфавита или найти цифры в текстовых ячейках.

Ячейка начинается с одного из значений

Если мы хотим узнать, что ячейка начинается хотя бы с одного из нескольких значений в диапазоне, можем использовать такую формулу:

=ИЛИ(ЕСЛИОШИБКА(ПОИСК(B1:B10; A1)=1;ЛОЖЬ))
  • ПОИСК(B1:B10; A1) - ищет каждое значение из диапазона B1:B10 в ячейке A1, возвращает позицию первого вхождения или ошибку #ЗНАЧ!
  • =1 - проверяет, равно ли значение 1, это означает: "начинается ли текст с искомого значения"
  • ЕСЛИОШИБКА(...; ЛОЖЬ) - обрабатывает ошибки, если ПОИСК возвращает ошибку (значение не найдено), заменяет ее на ЛОЖЬ
  • ИЛИ(...) - проверяет массив результатов и возвращает ИСТИНА, если хотя бы один элемент массива равен ИСТИНА, и ЛОЖЬ, если все элементы ЛОЖЬ

Что делает формула: Проверяет, начинается ли текст в ячейке A1 с ЛЮБОГО из значений из списка B1:B10

  • Пример: A1 = "Проект отчет 2024"
  • B1:B10 содержит: ["Отчет", "План", "Задача"]
  • Формула вернет ЛОЖЬ, потому что: "Проект" не начинается с "Отчет", "План" или "Задача"
  • Если бы A1 = "Отчет по проекту", формула вернула бы ИСТИНА

Особенности:

  • Чувствительна только к началу строки
  • Не находит значения в середине или конце текста
  • Учитывает точное начало (позиция = 1)
  • Работает как логическое ИЛИ по всем значениям списка
Ячейка начинается с одного из значений
B2=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$4;A2)=1;ЛОЖЬ))
ABCD
1ТекстНачинается?Список
2Отчет за майИСТИНА=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$4;A2)=1;ЛОЖЬ))отчет
3Проект отчет 2024ЛОЖЬ=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$4;A3)=1;ЛОЖЬ))план
4План продажИСТИНА=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$4;A4)=1;ЛОЖЬ))задача

«Проект отчет 2024» содержит «отчет», но не в начале: ПОИСК вернул 8, а не 1. Регистр не важен.

В английском Excel: =OR(IFERROR(SEARCH($D$2:$D$4,A2)=1,FALSE))

Ячейка заканчивается на одно из значений

=ИЛИ(ЕСЛИОШИБКА(ПОИСК(B1:B10; A1)=ДЛСТР(A1)-ДЛСТР(B1:B10)+1;ЛОЖЬ))

Формула проверяет, заканчивается ли текст в ячейке A1 на ЛЮБОЕ из значений из списка B1:B10.

  • ДЛСТР(A1) определяет общую длину текста в ячейке A1.
  • ДЛСТР(B1:B10) вычисляет длины всех искомых значений из списка.
  • Выражение ДЛСТР(A1)-ДЛСТР(B1:B10)+1 вычисляет позицию, с которой должно начинаться искомое значение в конце строки.
  • ПОИСК ищет каждое значение из списка и проверяет, находится ли оно в вычисленной конечной позиции.
  • ЕСЛИОШИБКА обрабатывает ошибки, заменяя их на ЛОЖЬ.
  • ИЛИ возвращает ИСТИНА, если хотя бы одно значение из списка находится в конце строки.

Формула работает по принципу: значение заканчивается на искомый текст, если он начинается с позиции (общая длина - длина искомого текста + 1).

А так она выглядит в действии (диапазоны слегка другие):

Ячейка заканчивается на одно из значений
B2=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$3;A2)=ДЛСТР(A2)-ДЛСТР($D$2:$D$3)+1;ЛОЖЬ))
ABCD
1ФайлЗаканчивается?Список
2отчёт.pdfИСТИНА=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$3;A2)=ДЛСТР(A2)-ДЛСТР($D$2:$D$3)+1;ЛОЖЬ))pdf
3pdf-инструкцияЛОЖЬ=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$3;A3)=ДЛСТР(A3)-ДЛСТР($D$2:$D$3)+1;ЛОЖЬ))docx
4итог.docxИСТИНА=ИЛИ(ЕСЛИОШИБКА(ПОИСК($D$2:$D$3;A4)=ДЛСТР(A4)-ДЛСТР($D$2:$D$3)+1;ЛОЖЬ))

Значение стоит в конце, если его позиция равна длине текста минус длина значения плюс один. «pdf-инструкция» начинается с pdf, поэтому не подходит.

Если ячейка содержит одно из слов — вернуть значение

Проверку «содержит» удобно обернуть в ЕСЛИ, чтобы получить свою метку, а функция ПРОСМОТР с приёмом «2; 1/…» вернёт само найденное слово:

Пометить строки, содержащие слово из списка
C3=ПРОСМОТР(2;1/ЕЧИСЛО(ПОИСК($D$2:$D$4;A3));$D$2:$D$4)
ABCD
1ЗапросМеткаНайденное словоСлова
2Купить ноутбук Lenovoцелевой=ЕСЛИ(СЧЁТ(ПОИСК($D$2:$D$4;A2))>0;"целевой";"прочее")ноутбук=ПРОСМОТР(2;1/ЕЧИСЛО(ПОИСК($D$2:$D$4;A2));$D$2:$D$4)ноутбук
3Чехол для iPhone 15целевой=ЕСЛИ(СЧЁТ(ПОИСК($D$2:$D$4;A3))>0;"целевой";"прочее")iPhone=ПРОСМОТР(2;1/ЕЧИСЛО(ПОИСК($D$2:$D$4;A3));$D$2:$D$4)iPhone
4Мышь беспроводнаяпрочее=ЕСЛИ(СЧЁТ(ПОИСК($D$2:$D$4;A4))>0;"целевой";"прочее")#Н/Д=ПРОСМОТР(2;1/ЕЧИСЛО(ПОИСК($D$2:$D$4;A4));$D$2:$D$4)планшет
5Ноутбук ASUS б/уцелевой=ЕСЛИ(СЧЁТ(ПОИСК($D$2:$D$4;A5))>0;"целевой";"прочее")ноутбук=ПРОСМОТР(2;1/ЕЧИСЛО(ПОИСК($D$2:$D$4;A5));$D$2:$D$4)

ПОИСК не различает регистр, поэтому «Ноутбук» в A5 тоже найден. ПРОСМОТР возвращает последнее подходящее слово из списка, а #Н/Д — если ни одно не найдено (оберните в ЕСЛИОШИБКА).

В английском Excel: =LOOKUP(2,1/ISNUMBER(SEARCH($D$2:$D$4,A3)),$D$2:$D$4)

Найти строку по нескольким условиям: ИНДЕКС и ПОИСКПОЗ

ВПР ищет только по одному столбцу. Чтобы найти значение по двум и более условиям — например, продажи товара в конкретном городе, — условия перемножают: (A2:A6=E2)*(B2:B6=F2) даёт 1 только в строке, где выполнены оба. ПОИСКПОЗ находит эту единицу, а ИНДЕКС возвращает значение из нужного столбца:

ВПР по двум условиям
G2=ИНДЕКС(C2:C6;ПОИСКПОЗ(1;(A2:A6=E2)*(B2:B6=F2);0))
ABCDEFG
1ГородТоварПродажиГород?Товар?Результат
2МоскваЧай120КазаньКофе210=ИНДЕКС(C2:C6;ПОИСКПОЗ(1;(A2:A6=E2)*(B2:B6=F2);0))
3МоскваКофе340
4КазаньЧай95
5КазаньКофе210
6СамараЧай80

Поменяйте город или товар в E2:F2 — формула найдёт другую строку. В Excel 2019 и раньше вводите её через Ctrl+Shift+Enter. Если нужна сумма по условиям, а не одно значение, используйте СУММЕСЛИМН.

В английском Excel: =INDEX(C2:C6,MATCH(1,(A2:A6=E2)*(B2:B6=F2),0))

В Excel 365 то же самое короче делают ФИЛЬТР (FILTER) и ПРОСМОТРX (XLOOKUP): =ФИЛЬТР(C2:C6;(A2:A6=E2)*(B2:B6=F2)) вернёт все подходящие значения, а не только первое. Сумму по нескольким условиям считает СУММЕСЛИМН.

Все строки по двум условиям: ФИЛЬТР
G2=ФИЛЬТР(C2:C5;(A2:A5=E2)*(B2:B5=F2))
ABCDEFG
1ГородТоварЦенаГородТоварЦены
2Москвачай120Москвачай120=ФИЛЬТР(C2:C5;(A2:A5=E2)*(B2:B5=F2))
3Москвакофе300150
4Казаньчай110
5Москвачай150

Перемножение условий — это «И»: строка подходит, только если оба сравнения дали ИСТИНА. ФИЛЬТР вывел обе цены «чая в Москве», а ИНДЕКС+ПОИСКПОЗ вернул бы только первую.

В английском Excel: =FILTER(C2:C5,(A2:A5=E2)*(B2:B5=F2))

Есть ли в диапазоне одно из значений: ВПР

Чтобы узнать, есть ли в диапазоне хоть одно из нескольких значений, можно использовать формулу массива на основе функции ВПР:

=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР(B1:B10;A1:A11;1;0);"")))>0

Вместо ВПР можно использовать ПРОСМОТРX, но я выбрал её как более привычную и универсальную функцию.

Объяснение логики:

  • ВПР(B1:B10;A1:A11;1;0) ищет каждое значение из диапазона B1:B10 в диапазоне A1:A11. Функция возвращает найденные значения или ошибку #Н/Д для значений, которые не были найдены.
  • ЕСЛИОШИБКА(...;"") обрабатывает возможные ошибки, заменяя все ошибки #Н/Д на пустые строки "". Это позволяет избежать прерывания работы формулы из-за ошибок.
  • ДЛСТР(...) вычисляет длину каждой строки в полученном массиве. Для найденных значений возвращается фактическая длина строки, а для пустых строк возвращается 0.
  • СУММ(...) суммирует все длины строк из предыдущего шага. Если хотя бы одно значение было найдено, сумма будет больше нуля.
  • >0 выполняет финальную проверку: если сумма длин больше нуля, формула возвращает ИСТИНА, что означает, что хотя бы одно значение из списка B1:B10 было найдено в диапазоне A1:A11. Если сумма равна нулю, формула возвращает ЛОЖЬ.

Похожая формула выявит, есть ли в диапазоне ячейки, начинающиеся на что-либо из списка:

=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР(B1:B10&"*";A1:A11;1;0);"")))>0

А эта - заканчиваются ли ячейки диапазона на любое из значений:

=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР("*"&B1:B10;A1:A11;1;0);"")))>0

В старых версиях Excel формулы нужно вводить сочетанием клавиш Ctrl + Shift + Enter, в новых этого делать не нужно.

Есть ли в диапазоне одно из значений: ВПР
F3=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР(C2:C3&"*";A2:A5;1;0);"")))>0
ABCDEF
1ДиапазонСписокПроверкаРезультат
2МоскваКазЕсть одно из значенийЛОЖЬ=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР(C2:C3;A2:A5;1;0);"")))>0
3Санкт-ПетербургбургЕсть начинающиеся наИСТИНА=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР(C2:C3&"*";A2:A5;1;0);"")))>0
4КазаньЕсть заканчивающиеся наИСТИНА=СУММ(ДЛСТР(ЕСЛИОШИБКА(ВПР("*"&C2:C3;A2:A5;1;0);"")))>0
5Новосибирск

«Каз» и «бург» не совпадают ни с одной ячейкой целиком, поэтому первая проверка — ЛОЖЬ. Со звёздочкой ВПР ищет по маске: «Каз*» находит «Казань», «*бург» — «Санкт-Петербург».

Отличие этих формул от формул массива на основе функций ПОИСК и НАЙТИ в том, что она проверяет сразу целый диапазон, а не каждое его значение по отдельности.

Найти ячейки по нескольким условиям в 2 клика с !SEMTools

Формулы выше прекрасно справляются с поставленными задачами. Однако, если подобные задачи приходится решать часто, поиск сохраненной копии формулы или её ручной ввод могут здорово замедлить процесс.

В подобной ситуации бывал неоднократно и автор этого сайта, поэтому придумал автоматизировать решение задачи, и создал под это несколько удобных процедур. А потом для множества других и т.д. Так однажды родилась целая надстройка для Excel.

Надстройка !SEMTools позволяет выполнять поиск по нескольким условиям без сложных формул. Вы можете выделить диапазон и задать критерии фильтрации — надстройка автоматически вернёт ИСТИНА и ЛОЖЬ напротив значений, удовлетворяющих нескольким условиям.

Поиск по нескольким условиям в Excel с надстройкой !SEMTools для Excel

Почему поиск по нескольким условиям не работает

  • Формула возвращает только одно значение или #ЗНАЧ!. В Excel 2019 и раньше формулы с диапазоном внутри (A2=$D$2:$D$5, ПОИСК(диапазон;…)) нужно вводить сочетанием Ctrl+Shift+Enter. Исключение — СЧЁТ(ПОИСК(…)) и СУММПРОИЗВ, они работают и без него.
  • Находится лишнее. ПОИСК ищет подстроку: «кот» найдётся и в «котёл». Если нужно целое слово, ищите с пробелами: ПОИСК(" "&$D$2:$D$4&" ";" "&A2&" ").
  • Пустая ячейка в списке ломает результат. ПОИСК пустой строки возвращает 1, и формула «содержит» срабатывает на любой ячейке. Список условий не должен содержать пустых ячеек, или ограничьте диапазон.
  • Не находится из-за лишних пробелов или регистра. Сравнение = и ПОИСК не учитывают регистр, а НАЙТИ и СОВПАД — учитывают. Лишние пробелы в данных удалите заранее.

Поиск по нескольким условиям — частые вопросы

Как найти несколько значений в Excel одновременно?

Чтобы проверить, совпадает ли ячейка с одним из значений списка, используйте =ИЛИ(A2=$D$2:$D$5). Чтобы проверить, содержит ли она одно из слов, — =СЧЁТ(ПОИСК($D$2:$D$5;A2))>0.

Если ячейка содержит слово, как вернуть значение?

Оберните проверку в ЕСЛИ: =ЕСЛИ(СЧЁТ(ПОИСК("ноутбук";A2))>0;"да";"нет"). Для списка слов вместо "ноутбук" укажите диапазон.

Как сделать ВПР по двум условиям?

Через ИНДЕКС и ПОИСКПОЗ с перемножением условий: =ИНДЕКС(C2:C6;ПОИСКПОЗ(1;(A2:A6=E2)*(B2:B6=F2);0)). В Excel 365 — ФИЛЬТР или ПРОСМОТРX.

Сколько условий принимает фильтр Excel?

Текстовый фильтр в автофильтре — два условия. Больше — через расширенный фильтр с таблицей условий, вспомогательный столбец с формулой из этой статьи или процедуру !SEMTools.

Отметить ячейки, которые совпадают, начинаются, содержат или заканчиваются на любое из десятков значений списка, можно в пару кликов с !SEMTools — без формул массива и Ctrl+Shift+Enter.
!SEMTools решает эту и сотни других задач в пару кликов!

Итоги: как искать по нескольким условиям в Excel

Надеюсь, на этой странице вы нашли то, что искали, и смогли найти нужные значения. Коротко о выборе способа:

ЗадачаФормула
Ячейка равна одному из значенийИЛИ(A2=список)
Ячейка содержит одно из словСЧЁТ(ПОИСК(список;A2))>0
Начинается / заканчивается на одно из значенийИЛИ(ЕСЛИОШИБКА(ПОИСК(…)=позиция;ЛОЖЬ))
Вернуть найденное словоПРОСМОТР(2;1/ЕЧИСЛО(ПОИСК(…));список)
Значение по двум условиямИНДЕКС + ПОИСКПОЗ или ФИЛЬТР (365)
Десятки условий, регулярно!SEMTools

Вас наверняка заинтересуют и похожие операции: найти слово в ячейках и заменить несколько значений сразу.