Как оставить в Excel только строки с определенным текстом: фильтрация, формулы и автоматизация

Работа с большими таблицами в Microsoft Excel часто требует извлечения только релевантных данных. Представьте: у вас список из 10 000 заказов, но нужны только те, где указан статус «Отгружен» или содержится слово «срочный». Вручную просматривать каждую строку — неэффективно. К счастью, в Excel есть как минимум 5 способов автоматизировать этот процесс, и мы разберём их от простого к сложному.

Эта статья подойдёт и новичкам, и опытным пользователям: здесь есть решения без формул (для тех, кто боится функций), и продвинутые методы с Power Query или VBA для обработки миллионов строк. Важно: перед применением любых методов всегда дублируйте исходные данные — это убережёт от потери информации при ошибке.

Если вы работаете с Google Таблицами, большинство способов тоже применимы — различия мы отметим отдельно. А для тех, кто любит горячие клавиши, в конце статьи будет список сочетаний, ускоряющих фильтрацию.

1. Простой фильтр: самый быстрый способ для новичков

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

Чтобы применить фильтр:

  1. Выделите заголовки столбцов (строку с названиями).
  2. Нажмите Ctrl+Shift+L или перейдите на вкладку Данные → Фильтр.
  3. Кликните по стрелке в столбце, где нужно искать текст, и выберите Текстовые фильтры → Содержит....
  4. Введите искомое слово (например, «важно») и нажмите ОК.

Плюсы: не требует знания формул, работает во всех версиях Excel (включая Excel 2010).

Минусы: фильтр сбрасывается при закрытии файла, не подходит для постоянного удаления строк.

📊 Какой способ фильтрации вы используете чаще?
Автофильтр
Формулы
Power Query
VBA
Ручной поиск

Важный нюанс: если в ячейке есть пробелы до/после текста, фильтр может не сработать. Используйте функцию =СЖПРОБЕЛЫ(), чтобы очистить данные перед фильтрацией.

2. Функция ФИЛЬТР (FILTER): динамическая фильтрация без VBA

В Excel 365 и Excel 2021 появилась революционная функция =ФИЛЬТР() (=FILTER() на английском), которая автоматически обновляет результат при изменении исходных данных. Она идеальна, если нужно оставить строки с определённым текстом в динамическом диапазоне.

Синтаксис:

=ФИЛЬТР(исходный_диапазон; (условие1) * (условие2); "Нет данных")

Пример: оставить строки, где в столбце B есть слово «ургентно» или «приоритет»:

=ФИЛЬТР(A2:D100; (ПОИСК("ургентно"; B2:B100)) + (ПОИСК("приоритет"; B2:B100)); "Нет срочных задач")

Функция ФИЛЬТР возвращает не статический результат, а «живую» таблицу, которая обновляется при редактировании исходных данных. Это удобно для дашбордов или отчётов, где данные меняются часто.

Что делать, если ФИЛЬТР не работает?

Если функция возвращает ошибку #ИМЯ?, проверьте:

1. Версию Excel (доступна только в 365/2021).

2. Локализацию: в русскоязычной версии используйте запятые, в английской — точки с запятой.

3. Диапазоны должны быть одинакового размера (например, A2:A100 и B2:B100, а не A2:A100 и B2:B99).

3. Условное форматирование + фильтр по цвету

Этот метод полезен, если нужно визуально выделить строки с определённым текстом, а потом отфильтровать их по цвету. Например, чтобы быстро найти все ячейки со словом «брак» и покрасить их в красный.

Инструкция:

  1. Выделите диапазон данных (например, A1:D1000).
  2. Перейдите в Главная → Условное форматирование → Создать правило.
  3. Выберите Использовать формулу для определения форматируемых ячеек.
  4. Введите формулу: =НЕ(ЕОШ(ПОИСК("брак"; A1))) (замените «брак» на свой текст).
  5. Задайте формат (например, красный фон) и нажмите ОК.
  6. Теперь примените фильтр по цвету: Данные → Фильтр → Фильтр по цвету ячейки.

⚠️ Внимание: этот способ работает только для текста в одной ячейке строки. Если текст может быть в любом из столбцов, используйте формулу массива:

=НЕ(ЕОШ(ПОИСК("брак"; A1:D1)))

Удалить лишние пробелы функцией СЖПРОБЕЛЫ()

Проверить регистр (функция ПОИСК чувствительна к нему)

Объединить ячейки, если текст разбит на несколько столбцов

Создать резервную копию данных-->

4. Power Query: обработка миллионов строк без тормозов

Power Query (или Get & Transform в Excel 2016+) — это инструмент для работы с большими данными. Он позволяет фильтровать строки по тексту, не нагружая сам Excel. Особенно актуален, если у вас файлы размером 100+ МБ.

Пошаговая инструкция:

  1. Выделите таблицу и нажмите Данные → Из таблицы/диапазонаExcel 2016Данные → Получить данные → Из таблицы/диапазона).
  2. В открывшемся окне Power Query выберите столбец, по которому будете фильтровать.
  3. Кликните по стрелке в заголовке столбца → Текстовые фильтры → Содержит....
  4. Введите текст (например, «важно») и нажмите ОК.
  5. Нажмите Закрыть и загрузить, чтобы вернуть отфильтрованные данные в Excel.

🔹 Преимущества Power Query:

  • 🚀 Обрабатывает миллионы строк без зависаний.
  • 🔄 Сохраняет шаги фильтрации: при обновлении данных в исходном файле достаточно нажать Обновить все.
  • 🛠️ Позволяет комбинировать несколько условий (например, «содержит срочно И не содержит отменено»).

⚠️ Внимание: после загрузки данных в Excel они становятся статическими. Чтобы обновить фильтрацию, нужно повторно запустить запрос через Данные → Обновить все. = Table.SelectRows(#"Предыдущий шаг", each Text.Contains(Text.Lower([Столбец]), "текст"))-->

5. VBA-макрос: автоматизация для повторяющихся задач

Если вам регулярно нужно оставлять строки с определённым текстом, макрос на VBA сэкономит часы времени. Например, чтобы еженедельно очищать отчёт от строк без слова «активно».

Пример кода для удаления всех строк, не содержащих искомый текст в столбце B:

Sub ОставитьСтрокиСТекстом()

Dim rng As Range, cell As Range, delRange As Range

Dim searchText As String

searchText = "активно" ' Замените на свой текст

Set rng = Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row)

For Each cell In rng

If InStr(1, cell.Value, searchText, vbTextCompare) = 0 Then

If delRange Is Nothing Then

Set delRange = cell.EntireRow

Else

Set delRange = Union(delRange, cell.EntireRow)

End If

End If

Next cell

If Not delRange Is Nothing Then delRange.Delete

End Sub

🔹 Как использовать:

  • 📝 Нажмите Alt+F11, чтобы открыть редактор VBA.
  • 📄 Вставьте код в новый модуль (Insert → Module).
  • ▶️ Запустите макрос через F5 или кнопку на панели.

⚠️ Внимание: макрос безвозвратно удаляет строки. Перед запуском:

  1. Сохраните файл с расширением .xlsm (чтобы сохранить макрос).
  2. Создайте резервную копию данных на другом листе.

Сравнение методов: какой выбрать?

Выбор способа зависит от задачи, объёма данных и вашего уровня владения Excel. Ниже таблица с сравнением ключевых параметров:

Метод Сложность Макс. строк Динамичность Подходит для
Автофильтр 1 000 000+ ❌ (сбрасывается) Быстрого просмотра
Функция ФИЛЬТР ⭐⭐ 1 000 000+ ✅ (обновляется автоматически) Дашбордов, отчётов
Условное форматирование ⭐⭐ 100 000 Визуального анализа
Power Query ⭐⭐⭐ 10 000 000+ ✅ (при ручном обновлении) Больших файлов, ETL
VBA ⭐⭐⭐⭐ Неограничено ❌ (требует запуска) Автоматизации рутинных задач

Частые ошибки и как их избежать

Даже опытные пользователи сталкиваются с проблемами при фильтрации текста. Вот топ-5 ошибок и их решения:

🔸 Ошибка 1: Фильтр не находит текст, хотя он есть в данных.

  • 📌 Причина: лишние пробелы или разные регистры.
  • 🛠 Решение: используйте =СЖПРОБЕЛЫ() и =НИЖНРЕГ() для нормализации данных.

🔸 Ошибка 2: Функция ФИЛЬТР возвращает #ЗНАЧ!.

  • 📌 Причина: диапазоны разного размера.
  • 🛠 Решение: проверьте, что все аргументы функции покрывают одинаковое количество строк.

🔸 Ошибка 3: VBA-макрос удаляет не те строки.

  • 📌 Причина: неверно указан диапазон или условие.
  • 🛠 Решение: добавьте Debug.Print в код, чтобы отладить логику.

🔸 Ошибка 4: Power Query не обновляет данные.

  • 📌 Причина: отключено автоматическое обновление.
  • 🛠 Решение: нажмите Данные → Обновить все или настройте автоматическое обновление в Свойствах соединения.

🔸 Ошибка 5: После фильтрации остались пустые строки.

  • 📌 Причина: в данных есть скрытые символы (например, неразрывный пробел).
  • 🛠 Решение: используйте =ПЕЧСИМВ(A1), чтобы их обнаружить.

FAQ: ответы на популярные вопросы

Можно ли отфильтровать строки по частичному совпадению текста?

Да! Для этого используйте:

  • В автофильтре: выберите Текстовые фильтры → Содержит....
  • В формулах: функции ПОИСК(), НАЙТИ() или ЕЧИСЛО(ПОИСК(...)).
  • В Power Query: оператор Text.Contains.

Пример формулы для поиска ячеек, содержащих «abc»:

=ЕЧИСЛО(ПОИСК("abc"; A1))
Как оставить строки, где текст НЕ содержится?

Используйте обратную логику:

  • В автофильтре: Текстовые фильтры → Не содержит....
  • В формулах:
  • =ФИЛЬТР(A2:D100; ЕОШ(ПОИСК("текст"; B2:B100)))
  • В VBA: замените InStr(...) = 0 на InStr(...) > 0 (и наоборот).
Работает ли это в Google Таблицах?

Да, но с нюансами:

  • 📌 Фильтр: аналогично Excel (Данные → Создать фильтр).
  • 📌 Функция ФИЛЬТР: поддерживается, но синтаксис на английском: =FILTER().
  • 📌 Power Query: нет аналога, но можно использовать Apps Script.
  • 📌 VBA: не поддерживается, вместо него — Apps Script.

Пример формулы для Google Таблиц:

=FILTER(A2:D100; REGEXMATCH(B2:B100; "текст"))
Как сохранить отфильтрованные данные в новый файл?

Способы:

  1. Копирование:
    1. Примените фильтр.
    2. Выделите видимые строки (Alt+;).
    3. Скопируйте (Ctrl+C) и вставьте в новый файл.
  2. Power Query:
    1. Отфильтруйте данные в Power Query.
    2. При загрузке выберите Создать связь.
    3. Скопируйте связь в новый файл через Данные → Получить данные → Из других источников → Из таблицы/диапазона (Power Query).
  3. VBA: добавьте в макрос строку для сохранения:
    ActiveWorkbook.SaveAs "Путь\к\новому\файлу.xlsx"
Можно ли фильтровать по нескольким словам одновременно?

Да! Используйте:

  • В автофильтре: примените фильтр несколько раз (например, сначала по «срочно», потом по «важно»).
  • В формулах:
    =ФИЛЬТР(A2:D100; (ПОИСК("слово1"; B2:B100)) * (ПОИСК("слово2"; B2:B100)))

    (здесь * работает как логическое И).

  • В Power Query:
    = Table.SelectRows(#"Предыдущий шаг", each Text.Contains([Столбец], "слово1") and Text.Contains([Столбец], "слово2"))

Для условия ИЛИ замените * на + (в формулах) или orPower Query).