Как в Excel отфильтровать данные по количеству слов: от базовых функций до автоматизации

Работа с текстовыми данными в Microsoft Excel часто требует нестандартных подходов — особенно когда нужно проанализировать структуру текста, а не только его содержание. Один из самых востребованных сценариев: фильтрация ячеек по количеству слов. Это может понадобиться для анализа отзывов клиентов (выделение слишком коротких или чрезмерно длинных комментариев), проверки заполненности анкет, обработки литературных текстов или даже для SEO-аудита мета-тегов. К сожалению, в Excel нет встроенной функции "ПОСЧИТАТЬ_СЛОВА", но эту задачу можно решить несколькими способами — от простых формул до автоматизации через Power Query и VBA.

В этой статье мы разберём 5 практических методов фильтрации по количеству слов — от ручных до полностью автоматизированных. Вы узнаете, как адаптировать каждый способ под свои задачи, избежать типичных ошибок (например, неправильного учёта знаков препинания или двойных пробелов) и выбрать оптимальный инструмент в зависимости от объёма данных. Все примеры приведены для актуальных версий Excel (2019–2026) и Microsoft 365, но большинство решений работают и в Excel 2016.

Метод 1: Использование формул для подсчёта слов

Самый универсальный способ — создать вспомогательный столбец с формулой, которая считает слова в каждой ячейке, а затем применить стандартный фильтр. Основная формула основана на комбинации функций ДЛСТР, ПОДСТАВИТЬ и ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;" ";""))+1;0)

Эта формула работает по принципу: количество слов = количество пробелов + 1. Однако у неё есть критические недостатки:

  • 🔹 Не учитывает знаки препинания (например, "Привет, мир!" посчитается как 1 слово).
  • 🔹 Ломается на двойных пробелах или табуляциях.
  • 🔹 Не работает с пустыми ячейками (вернёт 1 вместо 0).

Для более точного подсчёта используйте улучшенную версию:

=ЕСЛИ(

A2=""; 0;

ДЛСТР(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(A2;" ";" ");

", "; " ");

"."; "");

"!"; "");

"?"; "");

" ")

) - ДЛСТР(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(A2;" ";" ");

", "; " ");

"."; "");

"!"; "");

"?"; "");

" "; "")

) + 1

)

⚠️ Внимание: Формулы с многократной вложенностью ПОДСТАВИТЬ могут значительно замедлить работу Excel при обработке больших таблиц (10 000+ строк). В таких случаях лучше использовать Power Query или VBA.

После добавления формулы во вспомогательный столбец:

  1. Выделите диапазон с данными (включая столбец с количеством слов).
  2. Перейдите на вкладку Данные → Фильтр.
  3. Нажмите на стрелку фильтра в заголовке вспомогательного столбца и выберите Числовые фильтры → Больше... или Меньше....

☑️ Подготовка к фильтрации по словам

Выполнено: 0 / 4

Метод 2: Power Query — обработка больших объёмов данных

Power Query (или Get & Transform в новых версиях Excel) — идеальный инструмент для обработки текстовых данных объёмом от 50 000 строк. Он позволяет создавать многоступенчатые преобразования без замедления производительности. Чтобы отфильтровать данные по количеству слов через Power Query:

  1. Выделите исходный диапазон и перейдите на вкладку Данные → Из таблицы/диапазона (в Excel 2016: Данные → Новый запрос → Из таблицы/диапазона).
  2. В открывшемся редакторе Power Query добавьте настраиваемый столбец (Добавить столбец → Настраиваемый столбец) со следующей формулой:
= List.Count(Text.Split([ВашСтолбец], " "))

Где [ВашСтолбец] — название столбца с текстом. Эта формула:

  • 🔹 Разбивает текст по пробелам (Text.Split).
  • 🔹 Считает количество элементов в полученном списке (List.Count).
  • 🔹 Автоматически игнорирует пустые ячейки.

Далее:

  1. Отфильтруйте новый столбец по нужному условию (например, "больше 5").
  2. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.
Метод Макс. строк Точность Скорость Требует знаний
Формулы до 50 000 Средняя Медленно Базовые
Power Query 1 000 000+ Высокая Быстро Средние
VBA Неограничено Настраиваемая Мгновенно Продвинутые
📊 Какой метод вы используете чаще для работы с текстом в Excel?
Формулы
Power Query
VBA
Ручной подсчёт
Другой

Метод 3: VBA-скрипт для автоматизации

Если вам нужно регулярно фильтровать данные по количеству слов, имеет смысл создать макрос на VBA. Преимущества этого метода:

  • 🔹 Мгновенная обработка любых объёмов данных.
  • 🔹 Возможность добавить дополнительную логику (например, игнорировать стоп-слова).
  • 🔹 Интеграция с другими процессами (например, автоматическое копирование отфильтрованных данных в новый лист).

Пример макроса, который фильтрует выделенный диапазон по количеству слов (например, оставляет только ячейки с 3–7 словами):

Sub FilterByWordCount()

Dim rng As Range

Dim cell As Range

Dim wordCount As Integer

Dim minWords As Integer, maxWords As Integer

' Настройки фильтра (измените значения по нужде)

minWords = 3

maxWords = 7

' Проверка выделенного диапазона

On Error Resume Next

Set rng = Selection

On Error GoTo 0

If rng Is Nothing Then

MsgBox "Выделите диапазон с текстом!", vbExclamation

Exit Sub

End If

' Отключаем обновление экрана для ускорения

Application.ScreenUpdating = False

' Перебираем каждую ячейку

For Each cell In rng

If Not IsEmpty(cell.Value) Then

' Удаляем знаки препинания и считаем слова

wordCount = UBound(Split(Application.WorksheetFunction.Trim(cell.Value), " ")) + 1

' Скрываем ячейки, не соответствующие условию

If wordCount < minWords Or wordCount > maxWords Then

cell.EntireRow.Hidden = True

Else

cell.EntireRow.Hidden = False

End If

End If

Next cell

Application.ScreenUpdating = True

MsgBox "Фильтрация завершена! Оставлены строки с " & minWords & "-" & maxWords & " словами.", vbInformation

End Sub

Чтобы использовать этот макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите диапазон с данными в Excel и запустите макрос (Alt + F8 → FilterByWordCount → Выполнить).
⚠️ Внимание: Макрос скрывает строки, а не удаляет их. Чтобы вернуть все данные, нажмите Данные → Фильтр → Очистить или используйте макрос для отмены скрытия:
Sub ShowAllRows()

Cells.EntireRow.Hidden = False

End Sub

Метод 4: Условное форматирование для визуального анализа

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

Инструкция:

  1. Выделите диапазон с текстом.
  2. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  3. Выберите Использовать формулу для определения форматируемых ячеек.
  4. Введите формулу для подсчёта слов (аналогичную из Метода 1) и укажите условие. Например, чтобы выделить ячейки с более чем 10 словами:
=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))+1>10
  1. Задайте формат (например, красный фон) и нажмите ОК.

Преимущества этого метода:

  • 🔹 Не требует создания вспомогательных столбцов.
  • 🔹 Визуально интуитивен — сразу видно "проблемные" ячейки.
  • 🔹 Можно комбинировать несколько правил (например, зелёный для 3–5 слов, жёлтый для 6–10, красный для 10+).
Как удалить лишние пробелы перед форматированием?

Используйте функцию =СЖПРОБЕЛЫ(A1) в вспомогательном столбце или замените все двойные пробелы через Ctrl+H (замена " " на " ").

Метод 5: Функция ЛЯМБДА (Excel 365 и 2021)

В последних версиях Excel появилась революционная функция ЛЯМБДА, которая позволяет создавать собственные функции без VBA. С её помощью можно написать универсальную функцию для подсчёта слов, учитывающую все нюансы:

=ЛЯМБДА(текст;

ЕСЛИ(

текст=""; 0;

ДЛСТР(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

СЖПРОБЕЛЫ(текст);

", "; " ");

"."; "");

"!"; "");

"?"; "");

"; "; " ");

" ")

) - ДЛСТР(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

ПОДСТАВИТЬ(

СЖПРОБЕЛЫ(текст);

", "; " ");

"."; "");

"!"; "");

"?"; "");

"; "; " ");

" "; "")

) + 1

)

)

Чтобы использовать эту функцию:

  1. Создайте именованную функцию: перейдите на вкладку Формулы → Диспетчер имён → Создать.
  2. В поле Имя введите СЧЁТСЛОВ, в поле Диапазон — всю формулу выше.
  3. Теперь в любой ячейке можно использовать =СЧЁТСЛОВ(A1).

Преимущества ЛЯМБДА:

  • 🔹 Одноразовая настройка — потом функция доступна во всём файле.
  • 🔹 Легко модифицировать (например, добавить обработку тире или кавычек).
  • 🔹 Работает значительно быстрее, чем вложенные ПОДСТАВИТЬ.

Типичные ошибки и как их избежать

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

  1. Двойные пробелы или табуляции: Формулы считают их как отдельные "слова". Решение — используйте СЖПРОБЕЛЫ или замену через Ctrl+H.
  2. Знаки препинания: Точки, запятые и восклицательные знаки могут "склеивать" слова. Решение — добавляйте их в цепочку ПОДСТАВИТЬ (см. Метод 1).
  3. Многострочный текст: Переносы строк (Char(10)) разбивают текст на "слова". Решение — замените их на пробелы:
=ПОДСТАВИТЬ(A1; СИМВОЛ(10); " ")
  1. Кириллица + латиница: В смешанных текстах (например, "Привет hello") формулы работают корректно, но могут возникнуть проблемы с Power Query при неверной кодировке. Решение — сохраняйте файл в формате .xlsx, а не .csv.
  2. Слишком длинные формулы: Вложенность более 5–7 функций ПОДСТАВИТЬ приводит к ошибкам. Решение — используйте Power Query или VBA.

Проверьте себя: если ваша формула возвращает неожиданные результаты, разбейте её на части. Например, сначала посчитайте количество пробелов (=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))), затем добавьте обработку знаков препинания.

FAQ: Ответы на частые вопросы

Можно ли отфильтровать слова по длине (например, оставить только слова длиннее 5 символов)?

Да, но для этого потребуется VBA или Power Query. В VBA можно использовать регулярные выражения:

Function CountLongWords(text As String, minLength As Integer) As Integer

Dim regex As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\b\w{" & minLength & ",}\b"

regex.Global = True

CountLongWords = regex.Execute(text).Count

End Function

Эта функция вернёт количество слов длиной minLength или более.

Как посчитать уникальные слова в ячейке?

Для этого в Power Query используйте комбинацию Text.Split и List.Distinct:

= List.Count(List.Distinct(Text.Split([ВашСтолбец], " ")))

В VBA можно применить Dictionary:

Function UniqueWordsCount(text As String) As Integer

Dim dict As Object

Set dict = CreateObject("Scripting.Dictionary")

Dim words() As String: words = Split(Application.WorksheetFunction.Trim(text), " ")

Dim word As Variant

For Each word In words

If Not dict.exists(word) Then dict.Add word, 1

Next word

UniqueWordsCount = dict.Count

End Function

Почему формула считает "Excel2023" как одно слово, а мне нужно разделить на "Excel" и "2023"?

Это проблема сегментации текста. Решить её можно:

  • 🔹 Вручную добавить пробел между "Excel" и "2023".
  • 🔹 Использовать Power Query с функцией Text.Split и регулярным выражением [\d\D]+ (для разделения букв и цифр).
  • 🔹 В VBA применить Regex для разделения по переходу "буква-цифра":
regex.Pattern = "([a-zA-Z]+)(\d+)"
Как отфильтровать ячейки, где второе слово — конкретное значение (например, "Отчёт")?

Используйте формулу с ПСТР и НАЙТИ:

=ЕСЛИ(

И(

НАЙТИ(" ";A1)>0;

ПСТР(

A1;

НАЙТИ(" ";A1)+1;

НАЙТИ(" ";A1;НАЙТИ(" ";A1)+1)-НАЙТИ(" ";A1)-1

)="Отчёт";

);

"Да";

"Нет"

)

Для Power Query разделите текст по пробелу и отфильтруйте второй столбец.

Можно ли автоматически обновлять фильтр при изменении данных?

Да, для этого:

  • 🔹 В формулах: используйте динамические массивы (Excel 365) с ФИЛЬТР:
=ФИЛЬТР(A2:A100; (ДЛСТР(A2:A100)-ДЛСТР(ПОДСТАВИТЬ(A2:A100;" ";""))+1)>5)
  • 🔹 В Power Query: настройте автоматическое обновление (Данные → Обновить все → Свойства → Обновлять каждые X минут).
  • 🔹 В VBA: добавьте обработчик события Worksheet_Change:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A:A")) Is Nothing Then

Call FilterByWordCount

End If

End Sub