Подсчёт повторяющихся слов в Microsoft Excel — задача, с которой сталкиваются аналитики, копирайтеры, маркетологи и даже студенты. Вам может понадобиться найти дубликаты в списке товаров, проанализировать частотность ключевых слов в тексте или просто очистить данные от повторений. В отличие от стандартного поиска повторяющихся значений в ячейках, подсчёт слов внутри ячеек требует более гибких инструментов.
В этой статье разберём 5 рабочих методов: от базовых формул до автоматизации через Power Query и VBA. Каждый способ проиллюстрирован примерами для разных версий Excel (2010–2023), с учётом нюансов работы с регистром, знаками препинания и многоклеточными диапазонами. Если вы никогда не работали с массивами или макросами — не переживайте: мы начнём с самого простого.
⚠️ Важно: Все методы, кроме Power Query, чувствительны к регистру. Слово «Excel» и «EXCEL» будут считаться разными значениями. Если это критично, добавьте функцию НИЖНРЕГ() (или LOWER() в английской версии) для приведения текста к нижнему регистру.
Почему стандартный «Поиск дубликатов» не работает
Многие пользователи пытаются использовать инструмент Условное форматирование → Правила выделения ячеек → Повторяющиеся значения, но он ищет полные совпадения ячеек, а не отдельные слова внутри них. Например, в таблице:
| A1 | B1 |
|------------------|------------------|
| Яблоки, груши | Груши, бананы |
Excel не распознает, что слово «груши» повторяется, потому что сравнивает целиком A1 и B1. То же самое касается функции СЧЁТЕСЛИ() — она считает только полные совпадения ячеек, а не их содержимое.
Чтобы обойти это ограничение, придётся разбирать текст на слова и анализировать каждое отдельно. Далее — способы сделать это с разной степенью автоматизации.
Способ 1: Формула для подсчёта повторений одного слова
Если вам нужно найти, сколько раз конкретное слово (например, «отчёт») встречается в диапазоне ячеек, используйте комбинацию функций:
```excel
=СУММПРОИЗВ(
--(НЕОШИБКА(ПОИСКПОЗ(
" " & "отчёт" & " ";
" " & ПОДСТАВИТЬ(A1:A10; ","; " ") & " ";
0
)))
)
```
Как работает:
ПОДСТАВИТЬ()заменяет запятые на пробелы (если слова разделены запятыми).ПОИСКПОЗ()ищет слово «отчёт» с пробелами по краям, чтобы избежать ложных срабатываний (например, на слово «отчётность»).--(НЕОШИБКА())преобразует результаты в единицы и нули для суммирования.
⚠️ Внимание: Формула не учитывает слова в начале/конце ячейки без пробелов (например, «отчёт, яблоки»). Чтобы исправить это, добавьте замену начала/конца строки:
```excel
=СУММПРОИЗВ(
--(НЕОШИБКА(ПОИСКПОЗ(
" " & "отчёт" & " ";
" " & ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1:A10; ","; " "); " "; " ") & " ";
0
)))
)
```
Способ 2: Подсчёт всех повторяющихся слов в диапазоне
Чтобы вывести список всех уникальных слов и их количество, потребуется два шага:
Шаг 1: Разбить текст на отдельные слова
Создайте вспомогательный столбец с формулой (предположим, исходные данные в A1:A10):
```excel
=ТРАНСП(РАЗБИТЬТЕКСТ(ТЕКСТСОЕДИНИТЬ(";"&A1:A10&";");";";",";ИСТИНА))
```
Эта формула:
- Объединяет все ячейки в одну строку через точку с запятой (
ТЕКСТСОЕДИНИТЬ). - Разбивает строку по запятым и пробелам (
РАЗБИТЬТЕКСТ). - Транспонирует результат в столбец (
ТРАНСП).
⚠️ Внимание: РАЗБИТЬТЕКСТ() и ТЕКСТСОЕДИНИТЬ() доступны только в Excel 365 и 2021. Для старых версий используйте Power Query (способ 4).
Шаг 2: Подсчитать уникальные значения
В соседнем столбце добавьте:
```excel
=СЧЁТЕСЛИ($B$1:B1; B1)
```
Где B1 — первая ячейка со словами. Затем отсортируйте данные по убыванию, чтобы увидеть самые частые слова.
Удалить лишние знаки препинания (точки, восклицательные знаки)
Заменить табуляции и переносы строк на пробелы
Привести текст к нижнему регистру (если нужен регистронезависимый поиск)
Проверить отсутствие пустых ячеек-->
Способ 3: Использование сводной таблицы (без формул)
Если у вас Excel 2016 или новее, можно обойтись без формул:
- Выделите диапазон с текстом.
- Перейдите на вкладку
Вставка → Таблица(или нажмитеCtrl+T). - В меню
Работа с таблицами → Конструкторвключите строку итогов. - В строке итогов выберите
Счёт(илиCount). - Скопируйте столбец с данными и вставьте его через
Специальная вставка → Транспонировать. - Создайте сводную таблицу на основе транспонированных данных, перетащив поле со словами в области
СтрокииЗначения.
Этот метод подходит для быстрого анализа небольших объёмов данных (до 10 000 строк), но не учитывает знаки препинания и регистр.
| Метод | Плюсы | Минусы | Подходит для версий |
|---|---|---|---|
| Формулы (СУММПРОИЗВ) | Не требует дополнительных инструментов | Сложно редактировать, чувствителен к регистру | 2010–2023 |
| Сводная таблица | Визуально наглядно, быстро | Не обрабатывает знаки препинания | 2016–2023 |
| Power Query | Обрабатывает большие данные, гибкая настройка | Требует изучение интерфейса | 2010–2023 |
| VBA | Максимальная автоматизация, работает с любыми данными | Требует знания программирования | 2010–2023 |
Способ 4: Power Query для сложных текстов
Power Query (или Get & Transform в Excel 2016+) — самый мощный инструмент для работы с текстом. Он позволяет:
- 🔹 Разбивать текст на слова с учётом любых разделителей.
- 🔹 Удалять стоп-слова (предлоги, союзы).
- 🔹 Приводить текст к нижнему регистру.
- 🔹 Группировать и считать повторения за один шаг.
Пошаговая инструкция:
- Выделите диапазон с текстом и нажмите
Данные → Из таблицы/диапазона(илиData → From Table/Range). - В открывшемся редакторе Power Query выделите столбец с текстом, затем:
- Перейдите на вкладку
Преобразовать → Разделить столбец → По разделителю. - Укажите разделители: пробел, запятая, точка с запятой, табуляция.
- Нажмите
ОК— текст разобьётся на отдельные слова в новых строках. - Выделите новый столбец со словами, затем:
- Нажмите
Преобразовать → Формат → НИЖНРЕГ(для регистронезависимого поиска). - Удалите пустые строки:
Главная → Удалить строки → Удалить пустые.
Главная → Группировать по.- Выберите столбец со словами.
- Операция:
Счёт. - Назовите новое поле (например, «Количество»).
- Нажмите
Главная → Закрыть и загрузить, чтобы вернуть данные в Excel. - Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Запустите макрос (
F5) или назначьте его на кнопку.
Способ 5: Макрос VBA для автоматизации
Если вам нужно регулярно обрабатывать большие объёмы текста, напишите простой макрос. Этот код создаст новый лист с таблицей повторяющихся слов:
```vba
Sub CountWords()
Dim ws As Worksheet, wsNew As Worksheet
Dim rng As Range, cell As Range
Dim dict As Object
Dim words() As String, word As Variant
Dim i As Long, wordCount As Long
' Создать словарь для хранения слов
Set dict = CreateObject("Scripting.Dictionary")
' Указать диапазон с данными (например, Лист1!A1:A100)
Set ws = ThisWorkbook.Sheets("Лист1")
Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
' Обработать каждую ячейку
For Each cell In rng
If Len(cell.Value) > 0 Then
' Разбить текст на слова (разделители: пробел, запятая, точка с запятой)
words = Split(Application.WorksheetFunction.Substitute( _
Application.WorksheetFunction.Substitute(cell.Value, ",", " "), ";", " "))
For i = LBound(words) To UBound(words)
word = Trim(LCase(words(i))) ' Привести к нижнему регистру и убрать пробелы
If Len(word) > 0 Then
If dict.Exists(word) Then
dict(word) = dict(word) + 1
Else
dict.Add word, 1
End If
End If
Next i
End If
Next cell
' Создать новый лист с результатами
Set wsNew = ThisWorkbook.Sheets.Add
wsNew.Name = "Частотность слов"
wsNew.Range("A1").Value = "Слово"
wsNew.Range("B1").Value = "Количество"
' Вывести данные
i = 2
For Each word In dict.Keys
wsNew.Cells(i, 1).Value = word
wsNew.Cells(i, 2).Value = dict(word)
i = i + 1
Next word
' Отсортировать по убыванию
wsNew.Range("A1:B" & i - 1).Sort Key1:=wsNew.Range("B2"), Order1:=xlDescending
End Sub
```
Как использовать:
⚠️ Внимание: Макрос чувствителен к символам-разделителям. Если в тексте используются другие знаки (например, двоеточия или тире), добавьте их в функцию Split через Application.WorksheetFunction.Substitute.
Обработка особых случаев
1. Учёт знаков препинания
Если слова разделены не только запятыми, но и точками, восклицательными знаками и т.д., используйте ПОДСТАВИТЬ() несколько раз:
```excel
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(
A1;
"."; " ");
"!"; " ");
"?"; " ");
"-"; " ")
```
2. Игнорирование стоп-слов
Чтобы исключить предлоги («в», «на», «с») и союзы («и», «или»), добавьте проверку:
```excel
=ЕСЛИ(
ИЛИ(
B1="в"; B1="на"; B1="и"; B1="или";
ДЛСТР(B1) < 3 ' Игнорировать слова короче 3 символов
);
"";
СЧЁТЕСЛИ($B$1:B1; B1)
)
```
3. Работа с кириллицей и латиницей
Если текст смешанный (например, «iPhone и смартфон»), используйте Power Query с дополнительной фильтрацией:
- Добавьте столбец с проверкой кодировки:
=КОДСИМВ(ЛЕВСИМВ(B1)). - Отфильтруйте слова по диапазону кодов (например, кириллица: 1040–1103).
Как ускорить обработку больших файлов?
Для диапазонов свыше 50 000 строк отключите автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную) и используйте Power Query или VBA. В макросе добавьте строки Application.ScreenUpdating = False и Application.Calculation = xlCalculationManual в начале, а в конце верните настройки: Application.Calculation = xlCalculationAutomatic.
FAQ: Частые вопросы
Можно ли посчитать повторения слов в Google Таблицах?
Да, используйте аналогичные формулы:
- Для подсчёта одного слова:
=SUMPRODUCT(--(NOT(ISERROR(SEARCH(" " & "слово" & " "; " " & SUBSTITUTE(A1:A10; ","; " ") & " "))))) - Для списка всех слов: комбинация
SPLIT(),FLATTEN()иQUERY().
В Google Таблицах также есть встроенный инструмент Анализ данных → Частотность слов (доступен через надстройки).
Почему формула возвращает #ЗНАЧ!?
Ошибка #ЗНАЧ! возникает по трём причинам:
- В диапазоне есть пустые ячейки. Используйте
ЕСЛИ(A1="";"";формула). - Слово не найдено. Добавьте проверку
ЕСЛИОШИБКА(). - Несовпадение типов данных. Убедитесь, что искомое слово — текст (оберните в
ТЕКСТ()).
Как посчитать повторения фраз (не отдельных слов)?
Для поиска фраз (например, «отчёт за месяц») модифицируйте формулу:
```excel
=СУММПРОИЗВ(
--(НЕОШИБКА(ПОИСКПОЗ(
"отчёт за месяц";
A1:A10;
0
)))
)
```
Если фраза может быть частью другого текста (например, «отчёт за месяц» внутри «отчёт за месяц и год»), добавьте пробелы:
```excel
=СУММПРОИЗВ(
--(НЕОШИБКА(ПОИСКПОЗ(
" отчёт за месяц ";
" " & A1:A10 & " ";
0
)))
)
```
Можно ли автоматически обновлять подсчёт при изменении данных?
Да, для этого:
- Для формул: включите автоматический пересчёт (
Формулы → Параметры вычислений → Автоматически). - Для Power Query: нажмите
Данные → Обновить все(или настройте автоматическое обновление при открытии файла). - Для VBA: добавьте вызов макроса в событие
Worksheet_Change:
```vba
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1:A100")) Is Nothing Then
CountWords
End If
End Sub
```
Как визуализировать результаты (например, облако слов)?summary>
Excel не поддерживает облака слов напрямую, но есть обходные пути:
- Экспортируйте данные в Python (библиотека
wordcloud) или R (пакет wordcloud2).
- Используйте надстройки:
- Для Windows: Ablebits (плагин
Text Tools).
- Для Mac: WordCloud.app (внешнее ПО).
Создайте гистограмму в Excel:
- Отсортируйте слова по убыванию частотности.
- Вставьте столбчатую диаграмму (
Вставка → Гистограмма).
- Настройте ось X для отображения слов под углом (правый клик →
Формат оси).
wordcloud) или R (пакет wordcloud2).- Для Windows: Ablebits (плагин
Text Tools). - Для Mac: WordCloud.app (внешнее ПО).
- Отсортируйте слова по убыванию частотности.
- Вставьте столбчатую диаграмму (
Вставка → Гистограмма). - Настройте ось X для отображения слов под углом (правый клик →
Формат оси).