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

Почему стандартные функции Excel не справляются с подсчётом слов

Вы когда-нибудь пытались посчитать, сколько раз слово «договор» встречается в столбце с текстами, а Excel упорно выдавал ошибку или некорректный результат? Проблема в том, что Excel изначально не предназначен для текстовых аналитик — его сильные стороны в числовых расчётах, графиках и таблицах. Когда речь идёт о подсчёте повторяющихся слов, пользователи сталкиваются с тремя ключевыми вызовами:

Во-первых, Excel воспринимает текст как цельную строку, не разбивая её на отдельные слова автоматически. Во-вторых, регистр букв ("Слово" vs "слово") по умолчанию считается разными значениями. В-третьих, знаки препинания (!, ?, ,) «прилипают» к словам, искажая результаты. Например, фразы "Excel," и "Excel" будут восприняты как два разных слова.

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

📊 Какой инструмент вы чаще используете для работы с текстом в Excel?
Стандартные функции (LEN, MID и т.д.)
Power Query
VBA-макросы
Дополнительные надстройки (Kutools, Ablebits)
Не работаю с текстом

Метод 1: Подсчёт повторов с помощью формул (без Power Query)

Если у вас небольшой объём данных (до 1000 строк), можно обойтись стандартными формулами. Главный плюс этого способа — не требует установки надстроек и работает во всех версиях Excel. Минус: формулы получаются громоздкими, и их сложно масштабировать.

Базовая логика:

  1. Разбиваем текст на отдельные слова (с учётом регистра и знаков препинания).
  2. Считаем количество вхождений каждого слова.
  3. Выводим результат в удобном виде (например, топ-10 повторяющихся слов).

Пример формулы для подсчёта слова "Excel" в ячейке A1:

= (LEN(A1) - LEN(SUBSTITUTE(A1, "Excel", ""))) / LEN("Excel")

Но эта формула не учитывает регистр и знаки препинания. Чтобы исправить это, добавим функции LOWER (для приведения к нижнему регистру) и TRIM (для удаления лишних пробелов):

= (LEN(TRIM(LOWER(A1))) - LEN(SUBSTITUTE(TRIM(LOWER(A1)), "excel", ""))) / LEN("excel")
Почему формула может выдавать дробные числа?

Если в тексте есть частичное совпадение (например, слово "excelent" содержит "excel"), формула посчитает его как вхождение. Чтобы избежать этого, нужно разбивать текст на слова с помощью функции TEXTSPLIT (в Excel 365) или комбинации FILTERXML + SUBSTITUTE.

Шаблон для подсчёта всех уникальных слов

Создайте вспомогательную таблицу с уникальными словами и используйте COUNTIF с подстановочными знаками:

=COUNTIF($A$1:$A$100; "" & TRIM(B1) & "")

Где $A$1:$A$100 — диапазон с текстами, а B1 — ячейка со словом для поиска. Но помните: этот метод считает частичные совпадения (например, "word" и "password" будут посчитаны как содержащие "word").

⚠️ Внимание: Если в тексте есть аббревиатуры с точками (например, "и т.д."), их нужно предварительно заменить на варианты без точек через SUBSTITUTE, иначе они будут восприняты как отдельные слова.

Метод 2: Разбивка текста на слова с помощью Power Query

Power Query (или Get & Transform в новых версиях Excel) — это инструмент для импорта и преобразования данных, который идеально подходит для работы с текстами. Его преимущества:

  • 🔹 Автоматическая обработка больших объёмов данных (десятки тысяч строк).
  • 🔹 Возможность очистки текста от знаков препинания и стоп-слов (предлогов, союзов).
  • 🔹 Сохранение шагов обработки для повторного использования.

Алгоритм действий:

  1. Выделите диапазон с текстами и нажмите Данные → Из таблицы/диапазона (или Data → From Table/Range).
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой для разбивки текста на слова:
    = Text.Split([ВашСтолбец], " ")
  3. Разверните полученный столбец со словами (кнопка в заголовке столбца).
  4. Удалите знаки препинания с помощью замены:
    = Text.Replace([СтолбецСоСловами], "[^a-zA-Zа-яА-Я0-9]", "")
  5. Приведите все слова к нижнему регистру:
    = Text.Lower([СтолбецСоСловами])
  6. Сгруппируйте данные по столбцу со словами и посчитайте количество вхождений (Группировка → Операция: Count Rows).

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

Удалить лишние пробелы (TRIM)|Привести к нижнему регистру (Text.Lower)|Убрать знаки препинания (Text.Replace)|Разбить текст на слова (Text.Split)|Удалить стоп-слова (фильтр по списку)-->

Метод 3: Использование VBA для автоматизации

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

  • 🔹 Игнорировать стоп-слова (предлоги, союзы).
  • 🔹 Учитывать или игнорировать регистр.
  • 🔹 Сохранять результаты в отдельном файле.

Пример кода для подсчёта слов в выделенном диапазоне:

Sub CountWords()

Dim rng As Range, cell As Range

Dim dict As Object

Set dict = CreateObject("Scripting.Dictionary")

' Выбор диапазона с текстами

Set rng = Selection

' Обработка каждого слова в диапазоне

For Each cell In rng

If Not IsEmpty(cell.Value) Then

Dim words() As String

words = Split(Application.WorksheetFunction.Trim(cell.Value), " ")

For i = LBound(words) To UBound(words)

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

Dim cleanWord As String

cleanWord = LCase(Replace(Replace(words(i), ".", ""), ",", ""))

If dict.exists(cleanWord) Then

dict(cleanWord) = dict(cleanWord) + 1

Else

dict.Add cleanWord, 1

End If

Next i

End If

Next cell

' Вывод результатов на новый лист

Dim ws As Worksheet

Set ws = ThisWorkbook.Sheets.Add

ws.Range("A1").Value = "Слово"

ws.Range("B1").Value = "Количество"

Dim i As Integer

i = 2

For Each Key In dict.keys

ws.Cells(i, 1).Value = Key

ws.Cells(i, 2).Value = dict(Key)

i = i + 1

Next Key

End Sub

Чтобы запустить макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Вернитесь в Excel, выделите диапазон с текстами и запустите макрос (View → Macros → CountWords).
⚠️ Внимание: Если в тексте есть слова с апострофами (например, "don't"), их нужно обрабатывать отдельно, иначе они будут разбиты на две части. Добавьте в код замену апострофа на пробел или удалите его.

Метод 4: Использование функции TEXTSPLIT (Excel 365 и 2021)

В новых версиях Excel появилась функция TEXTSPLIT, которая упрощает разбивку текста на слова. Она позволяет указать разделители (пробелы, запятые, точки) и автоматически разбирает строку на части.

Пример использования:

=TEXTSPLIT(A1; " "; ; TRUE)

Где:

  • A1 — ячейка с текстом;
  • " " — разделитель (пробел);
  • TRUE — игнорировать пустые ячейки.

После разбивки можно использовать UNIQUE для получения списка уникальных слов и COUNTIF для подсчёта повторов:

=UNIQUE(TEXTSPLIT(A1; " "; ; TRUE))

Для подсчёта количества вхождений каждого слова:

=BYROW(UNIQUE(TEXTSPLIT(A1; " "; ; TRUE));

LAMBDA(word; COUNTIF(TEXTSPLIT(A1; " "; ; TRUE); word)))

Этот метод самый простой для пользователей Excel 365, но не работает в старых версиях. Также он не учитывает регистр и знаки препинания — их нужно очищать отдельно.

Метод Подходит для версий Макс. объём данных Учитывает регистр Очищает знаки препинания
Формулы (SUBSTITUTE + LEN) Все версии До 1000 строк Нет Нет
Power Query Excel 2016+ Десятки тысяч строк Настраивается Да
VBA-макрос Все версии Ограничено памятью Настраивается Да
TEXTSPLIT + UNIQUE Excel 365/2021 До 5000 строк Нет Нет

Ошибки и как их избежать

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

  1. Пробелы в начале/конце слов. Функция TRIM удаляет только лишние пробелы между словами, но не внутри них. Например, " Excel " и "Excel" будут восприняты как разные слова. Решение: используйте CLEAN + TRIM.
  2. Слова с дефисами. Слова типа "high-tech" или "по-русски" разбиваются на части. Решение: замените дефис на пробел или обрабатывайте такие слова отдельно.
  3. Числа в тексте. Если в тексте есть числа (например, "2026 год"), их нужно либо исключить, либо привести к текстовому формату, иначе они могут быть посчитаны как отдельные "слова".

Ещё одна частая проблема — переполнение памяти при работе с большими текстами (более 10 000 строк). В этом случае:

  • 🔹 Разбейте данные на части и обрабатывайте их по отдельности.
  • 🔹 Используйте Power Query вместо формул — он оптимизирован для больших объёмов.
  • 🔹 Если работаете в VBA, добавляйте DoEvents в циклы, чтобы избежать зависания.

Продвинутые техники: подсчёт N-грамм и стоп-слов

Если вам нужно не просто посчитать повторяющиеся слова, а проанализировать текст глубже (например, найти часто встречающиеся фразы из 2–3 слов), используйте N-граммы. Это последовательности из N слов, которые помогают выявить контекстные повторения.

Пример для биграмм (пар слов):

=TEXTJOIN(" "; TRUE; IF(LEN(TEXTSPLIT(A1; " "))>1;

TEXTSPLIT(A1; " ") & " " & INDEX(TEXTSPLIT(A1; " ");;2); ""))

Для исключения стоп-слов (предлогов, союзов) создайте отдельный список в Excel и используйте фильтрацию. Например, в Power Query добавьте шаг:

= Table.SelectRows(#"Предыдущий Шаг", each not List.Contains({"и", "в", "на", "не"}, [СтолбецСоСловами]))

Это полезно для:

  • 🔹 Анализа ключевых фраз в отзывах клиентов.
  • 🔹 Поиска часто повторяющихся ошибок в логах.
  • 🔹 Оптимизации SEO-текстов (поиск переспама ключевых слов).

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

Можно ли посчитать повторяющиеся слова в Google Таблицах?

Да, но с ограничениями. В Google Sheets нет TEXTSPLIT, но можно использовать:

=ARRAYFORMULA(IFERROR(SPLIT(REGEXREPLACE(A1; "[^a-zA-Zа-яА-Я ]"; ""); " ")))

Для подсчёта повторов используйте QUERY или COUNTIF. Также в Google Sheets есть надстройка Power Tools, которая упрощает работу с текстами.

Как посчитать слова в диапазоне, игнорируя регистр?

Используйте комбинацию LOWER + SUBSTITUTE:

=SUMPRODUCT(--(ISNUMBER(SEARCH(" " & LOWER(B1) & " "; " " & LOWER(A1:A100) & " "))))

Где B1 — слово для поиска, A1:A100 — диапазон с текстами. Пробелы в начале и конце нужны, чтобы избежать частичных совпадений.

Почему моя формула считает слово "word" в слове "password"?

Это происходит из-за подстановочных знаков (*) или функции SEARCH, которая ищет частичные совпадения. Чтобы считать только целые слова, используйте:

=SUMPRODUCT(--(MMULT(--(" " & LOWER(A1:A100) & " " = " " & LOWER(B1) & " "); {1}) > 0))

Или разбивайте текст на слова через TEXTSPLIT (в Excel 365).

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

Если используете формулы, они обновляются автоматически. Для Power Query нажмите Данные → Обновить все (или Data → Refresh All). В VBA добавьте в код обработчик событий:

Private Sub Worksheet_Change(ByVal Target As Range)

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

CountWords ' Вызов вашего макроса

End If

End Sub

Можно ли посчитать слова в PDF или Word через Excel?

Прямо в Excel — нет, но можно:

  1. Скопировать текст из PDF/Word и вставить в Excel.
  2. Использовать Power Query для импорта из PDF (требуется надстройка Adobe Acrobat или конвертация в TXT).
  3. Написать макрос на VBA, который будет считывать данные из Word:
Dim wordApp As Object, doc As Object

Set wordApp = CreateObject("Word.Application")

Set doc = wordApp.Documents.Open("C:\Путь\к\файлу.docx")

' Код для обработки текста

doc.Close

wordApp.Quit