Microsoft Excel — мощный инструмент для работы с данными, но стандартный поиск по Ctrl+F ищет только одно значение за раз. Что делать, если нужно найти сразу несколько элементов — например, все товары из списка поставщиков или сотрудников с определёнными должностями? В этой статье разберём 5 способов, которые сэкономят вам часы ручной работы.
Мы рассмотрим как простые методы (фильтры и условное форматирование), так и продвинутые — с использованием функций ПОИСКПОЗ/ИНДЕКС, Power Query и даже VBA для автоматизации. Каждый способ подходит для разных задач: от разового поиска до создания динамических отчётов. Выбирайте подходящий по уровню сложности и объёму данных.
1. Быстрый поиск через расширенный фильтр
Если вам нужно выделить строки, содержащие любое из нескольких значений, расширенный фильтр — самое простое решение. Он не требует формул и работает даже в больших таблицах (до миллиона строк).
Допустим, у вас есть таблица с продажами, и вы хотите найти все записи, где в колонке Товар встречаются "Ноутбук", "Монитор" или "Клавиатура". Вот как это сделать:
- 📌 Шаг 1. Создайте отдельный список искомых значений (например, в столбце
E1:E3). Каждое значение — в отдельной ячейке. - 📌 Шаг 2. Выделите исходную таблицу (включая заголовки). Перейдите на вкладку
Данные → Фильтр → Расширенный фильтр. - 📌 Шаг 3. В поле
Диапазон условийукажите адрес вашего списка (например,$E$1:$E$3). Отметьте галочкуСкопировать результат в другое местои укажите ячейку для вывода.
Готово! Excel выведет все строки, где в колонке Товар есть хотя бы одно из указанных значений. Важно: расширенный фильтр чувствителен к регистру — "ноутбук" и "Ноутбук" для него разные значения.
⚠️ Внимание: Если в списке условий есть пустые ячейки, Excel проигнорирует их, но может замедлить обработку больших таблиц. Удаляйте лишние строки перед фильтрацией.
Создать список искомых значений в отдельном столбце
Убедиться, что в списке нет пустых ячеек
Выделить исходную таблицу с заголовками
Проверить чувствительность к регистру (при необходимости привести данные к одному регистру)-->
2. Условное форматирование для визуального поиска
Если вам не нужно извлекать данные, а достаточно просто подсветить ячейки с искомыми значениями, используйте условное форматирование. Этот метод наглядно показывает все совпадения прямо в таблице.
Пример: подсветим все ячейки в колонке Город, где встречаются "Москва", "Санкт-Петербург" или "Казань".
- 🎨 Шаг 1. Выделите диапазон с данными (например,
B2:B100). - 🎨 Шаг 2. Перейдите на вкладку
Главная → Условное форматирование → Создать правило → Использовать формулу.... - 🎨 Шаг 3. Введите формулу:
=ИЛИ(B2="Москва"; B2="Санкт-Петербург"; B2="Казань")Задайте цвет заполнения (например, жёлтый) и нажмите
ОК.
Теперь все ячейки с указанными городами будут выделены. Преимущество метода — динамичность: если данные в таблице изменятся, подсветка обновится автоматически.
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Расширенный фильтр | Быстро, не требует формул | Не обновляется автоматически | Разовый поиск в больших таблицах |
| Условное форматирование | Визуально наглядно, динамично | Не извлекает данные, только подсвечивает | Анализ данных без выгрузки |
| Функции ПОИСКПОЗ/ИНДЕКС | Гибкость, работает с динамическими диапазонами | Сложнее настроить | Создание отчётов по нескольким критериям |
Расширенный фильтр
Условное форматирование
Функции ПОИСКПОЗ/ИНДЕКС
Power Query
Не знаю, что это-->
3. Поиск с помощью функций ПОИСКПОЗ и ИНДЕКС
Для динамического поиска по нескольким критериям подойдёт комбинация функций ПОИСКПОЗ и ИНДЕКС. Этот метод позволяет извлекать данные по списку значений и обновлять результаты при изменении исходных данных.
Предположим, у вас есть таблица с заказами, и вы хотите найти все строки, где Статус равен "Оплачен" или "Доставлен", а Сумма превышает 10 000 ₽. Вот формула для извлечения таких строк:
=ЕСЛИОШИБКА(
ИНДЕКС($A$2:$D$100;
ПОИСКПОЗ(0;
(--($B$2:$B$100="Оплачен")+--($B$2:$B$100="Доставлен"))*
--($C$2:$C$100>10000)*
(СТРОКА($A$2:$A$100)-СТРОКА($A$2)+1);
0);
""
)
Эта формула массива (вводится через Ctrl+Shift+Enter в старых версиях Excel) возвращает первую строку, соответствующую условиям. Чтобы извлечь все строки, протяните формулу вниз.
⚠️ Внимание: В Excel 365 и Excel 2021 формулы массива вводятся безCtrl+Shift+Enter— просто нажмитеEnter. В более старых версиях без массива формула не сработает.
Как работает формула?
Функция --($B$2:$B$100="Оплачен") преобразует логические значения ИСТИНА/ЛОЖЬ в 1/0, а умножение этих массивов даёт позицию строки, где выполняются все условия. ПОИСКПОЗ(0; ...) находит первую позицию, где произведение равно 0 (т.е. все условия совпадают).
4. Power Query: поиск по нескольким значениям в больших данных
Если вы работаете с огромными таблицами (десятки тысяч строк), Power Query — самый эффективный инструмент. Он позволяет фильтровать данные по нескольким критериям без нагрузки на Excel.
Алгоритм действий:
- 🔄 Шаг 1. Выделите исходную таблицу и нажмите
Данные → Из таблицы/диапазона(в Excel 2016+). - 🔄 Шаг 2. В редакторе Power Query выберите колонку для фильтрации (например,
Категория). - 🔄 Шаг 3. Нажмите на стрелку фильтра →
Текстовые фильтры → Равно...и введите первое значение (например, "Электроника"). - 🔄 Шаг 4. Повторите шаг 3 для остальных значений, выбрав
ИЛИв меню фильтра. - 🔄 Шаг 5. Нажмите
Закрыть и загрузить, чтобы вернуть отфильтрованные данные в Excel.
Преимущество Power Query — независимость от размера таблицы. Даже если у вас 100 000 строк, фильтрация займёт секунды. Кроме того, запрос можно сохранить и обновлять одним кликом.
5. Автоматизация поиска с помощью VBA
Для продвинутых пользователей, которым нужно регулярно искать разные наборы значений, подойдёт макрос на VBA. Он позволит создавать гибкие фильтры по любым критериям и даже сохранять результаты в отдельный файл.
Пример макроса, который копирует строки с несколькими искомыми значениями в новую книгу:
Sub SearchMultipleValues()
Dim wsSource As Worksheet, wsDest As Worksheet
Dim rngData As Range, rngCriteria As Range
Dim cell As Range, crit As Variant
Dim lastRow As Long, i As Long
' Настройка исходных данных
Set wsSource = ThisWorkbook.Sheets("Лист1") ' Источник
Set rngData = wsSource.Range("A1").CurrentRegion ' Диапазон данных
Set rngCriteria = wsSource.Range("F1:F3") ' Диапазон с искомыми значениями
' Создание новой книги для результатов
Set wsDest = Workbooks.Add.Worksheets(1)
rngData.Rows(1).Copy wsDest.Range("A1") ' Копируем заголовки
' Поиск и копирование строк
lastRow = 2
For Each cell In rngCriteria
crit = cell.Value
For i = 2 To rngData.Rows.Count
If InStr(1, rngData.Cells(i, 2).Value, crit, vbTextCompare) > 0 Then
rngData.Rows(i).Copy wsDest.Range("A" & lastRow)
lastRow = lastRow + 1
End If
Next i
Next cell
' Удаление дубликатов
wsDest.Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
End Sub
Этот макрос ищет значения из диапазона F1:F3 в втором столбце исходной таблицы и копирует найденные строки в новую книгу. Чтобы адаптировать его под свою задачу:
- 🔧 Измените
Sheets("Лист1")на имя вашего листа. - 🔧 Замените
Range("F1:F3")на диапазон со своими значениями. - 🔧 В строке
rngData.Cells(i, 2)цифра2— это номер столбца для поиска (1 = столбец A, 2 = B и т.д.).
⚠️ Внимание: Перед запуском макроса сохраните книгу в формате .xlsm (с поддержкой макросов). В противном случае Excel заблокирует выполнение кода.
Сравнение методов: какой выбрать?
Выбор метода зависит от объёма данных, частоты использования и требований к результату. Вот краткое руководство:
- 📊 Разовый поиск в небольшой таблице (до 10 000 строк): расширенный фильтр или условное форматирование.
- 📊 Регулярный поиск по нескольким критериям: функции
ПОИСКПОЗ/ИНДЕКСили Power Query. - 📊 Обработка больших данных (100 000+ строк): только Power Query или VBA.
- 📊 Автоматизация отчётов: VBA или комбинация Power Query +
ПОИСКПОЗ.
Для большинства задач достаточно первых трёх методов. VBA и Power Query пригодятся, если вы работаете с данными профессионально — например, формируете отчёты для бухгалтерии или аналитики.
FAQ: Частые вопросы по поиску нескольких значений
Можно ли искать значения с учётом регистра?
Да, но не все методы это поддерживают. Расширенный фильтр и функции Excel (например, НАЙТИ) чувствительны к регистру, а ПОИСК — нет. В Power Query можно использовать параметр Comparer.Ordinal для точного сопоставления.
Как искать по частичному совпадению (например, "ноут*" для "ноутбук")?
Используйте подстановочные знаки:
- В расширенном фильтре введите
=ноут(звёздочка заменяет любые символы). - В формулах применяйте
ПОИСК("ноут"; A2)илиРАЗНСТР(A2; "ноут")=ЛОЖЬ. - В Power Query используйте фильтр
Текст содержит.
Почему ПОИСКПОЗ возвращает ошибку #Н/Д?
Ошибка #Н/Д означает, что ни одно из значений не найдено. Проверьте:
- Правильно ли указан диапазон поиска (например,
$A$2:$A$100вместоA2:A100). - Совпадают ли типы данных (текст vs число). Например,
ПОИСКПОЗ(123; A2:A100)не найдёт ячейку с текстом"123". - Нет ли скрытых символов (пробелов, неразрывных пробелов). Используйте
СЖПРОБЕЛЫдля очистки данных.
Как сохранить результаты поиска в отдельный файл?
Способы в зависимости от метода:
- Расширенный фильтр: при настройке отметьте
Скопировать результат в другое местои укажите новый лист. Затем скопируйте его в другую книгу. - Power Query: после фильтрации нажмите
Закрыть и загрузить в...→Новая книга. - VBA: используйте код из раздела 5 — он автоматически создаёт новую книгу с результатами.
Можно ли искать значения из другой книги Excel?
Да, но с ограничениями:
- Формулы: используйте ссылки вида
=ПОИСКПОЗ(A2; [Книга2.xlsx]Лист1!$A$2:$A$100; 0). Обе книги должны быть открыты. - Power Query: подключите внешнюю книгу как источник данных (
Данные → Получить данные → Из файла → Из книги Excel). - VBA: откройте вторую книгу в коде с помощью
Workbooks.Open("Путь\к\файлу.xlsx").
⚠️ При закрытии внешней книги ссылки в формулах прервутся (вернут #ССЫЛКА!).