Работа с текстовыми данными в 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.
После добавления формулы во вспомогательный столбец:
- Выделите диапазон с данными (включая столбец с количеством слов).
- Перейдите на вкладку
Данные → Фильтр. - Нажмите на стрелку фильтра в заголовке вспомогательного столбца и выберите
Числовые фильтры → Больше...илиМеньше....
☑️ Подготовка к фильтрации по словам
Метод 2: Power Query — обработка больших объёмов данных
Power Query (или Get & Transform в новых версиях Excel) — идеальный инструмент для обработки текстовых данных объёмом от 50 000 строк. Он позволяет создавать многоступенчатые преобразования без замедления производительности. Чтобы отфильтровать данные по количеству слов через Power Query:
- Выделите исходный диапазон и перейдите на вкладку
Данные → Из таблицы/диапазона(в Excel 2016:Данные → Новый запрос → Из таблицы/диапазона). - В открывшемся редакторе Power Query добавьте настраиваемый столбец (
Добавить столбец → Настраиваемый столбец) со следующей формулой:
= List.Count(Text.Split([ВашСтолбец], " "))
Где [ВашСтолбец] — название столбца с текстом. Эта формула:
- 🔹 Разбивает текст по пробелам (
Text.Split). - 🔹 Считает количество элементов в полученном списке (
List.Count). - 🔹 Автоматически игнорирует пустые ячейки.
Далее:
- Отфильтруйте новый столбец по нужному условию (например, "больше 5").
- Нажмите
Закрыть и загрузить, чтобы вернуть данные в Excel.
| Метод | Макс. строк | Точность | Скорость | Требует знаний |
|---|---|---|---|---|
| Формулы | до 50 000 | Средняя | Медленно | Базовые |
| Power Query | 1 000 000+ | Высокая | Быстро | Средние |
| 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
Чтобы использовать этот макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите диапазон с данными в Excel и запустите макрос (
Alt + F8 → FilterByWordCount → Выполнить).
⚠️ Внимание: Макрос скрывает строки, а не удаляет их. Чтобы вернуть все данные, нажмите Данные → Фильтр → Очистить или используйте макрос для отмены скрытия:
Sub ShowAllRows()
Cells.EntireRow.Hidden = False
End Sub
Метод 4: Условное форматирование для визуального анализа
Если вам не нужно скрывать или извлекать данные, а достаточно просто выделить ячейки с определённым количеством слов, используйте условное форматирование. Этот метод наглядно показывает распределение текстов по длине без изменения структуры таблицы.
Инструкция:
- Выделите диапазон с текстом.
- Перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу для подсчёта слов (аналогичную из Метода 1) и укажите условие. Например, чтобы выделить ячейки с более чем 10 словами:
=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))+1>10
- Задайте формат (например, красный фон) и нажмите
ОК.
Преимущества этого метода:
- 🔹 Не требует создания вспомогательных столбцов.
- 🔹 Визуально интуитивен — сразу видно "проблемные" ячейки.
- 🔹 Можно комбинировать несколько правил (например, зелёный для 3–5 слов, жёлтый для 6–10, красный для 10+).
Как удалить лишние пробелы перед форматированием?
Используйте функцию =СЖПРОБЕЛЫ(A1) в вспомогательном столбце или замените все двойные пробелы через Ctrl+H (замена " " на " ").
Метод 5: Функция ЛЯМБДА (Excel 365 и 2021)
В последних версиях Excel появилась революционная функция ЛЯМБДА, которая позволяет создавать собственные функции без VBA. С её помощью можно написать универсальную функцию для подсчёта слов, учитывающую все нюансы:
=ЛЯМБДА(текст;
ЕСЛИ(
текст=""; 0;
ДЛСТР(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
СЖПРОБЕЛЫ(текст);
", "; " ");
"."; "");
"!"; "");
"?"; "");
"; "; " ");
" ")
) - ДЛСТР(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
ПОДСТАВИТЬ(
СЖПРОБЕЛЫ(текст);
", "; " ");
"."; "");
"!"; "");
"?"; "");
"; "; " ");
" "; "")
) + 1
)
)
Чтобы использовать эту функцию:
- Создайте именованную функцию: перейдите на вкладку
Формулы → Диспетчер имён → Создать. - В поле
ИмявведитеСЧЁТСЛОВ, в полеДиапазон— всю формулу выше. - Теперь в любой ячейке можно использовать
=СЧЁТСЛОВ(A1).
Преимущества ЛЯМБДА:
- 🔹 Одноразовая настройка — потом функция доступна во всём файле.
- 🔹 Легко модифицировать (например, добавить обработку тире или кавычек).
- 🔹 Работает значительно быстрее, чем вложенные
ПОДСТАВИТЬ.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при фильтрации по количеству слов. Вот самые распространённые ошибки и их решения:
- Двойные пробелы или табуляции: Формулы считают их как отдельные "слова". Решение — используйте
СЖПРОБЕЛЫили замену черезCtrl+H. - Знаки препинания: Точки, запятые и восклицательные знаки могут "склеивать" слова. Решение — добавляйте их в цепочку
ПОДСТАВИТЬ(см. Метод 1). - Многострочный текст: Переносы строк (
Char(10)) разбивают текст на "слова". Решение — замените их на пробелы:
=ПОДСТАВИТЬ(A1; СИМВОЛ(10); " ")
- Кириллица + латиница: В смешанных текстах (например, "Привет hello") формулы работают корректно, но могут возникнуть проблемы с
Power Queryпри неверной кодировке. Решение — сохраняйте файл в формате .xlsx, а не .csv. - Слишком длинные формулы: Вложенность более 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