Вы когда-нибудь сталкивались с задачей подсчёта повторяющихся слов в одной ячейке Microsoft Excel? Например, когда нужно проанализировать текст отзыва клиента, выявить часто используемые термины в описании товара или просто очистить данные от дубликатов. Эта задача кажется простой, но стандартных функций для её решения в Excel нет. Приходится комбинировать текстовые функции, использовать Power Query или даже писать макросы на VBA.
В этой статье мы разберём 5 проверенных методов, которые помогут посчитать количество одинаковых слов в ячейке — от элементарных формул для начинающих до автоматизированных решений для обработки больших массивов данных. Вы узнаете, как адаптировать каждый способ под свои задачи, избежать типичных ошибок и сэкономить часы ручной работы. А в конце статьи вас ждёт бонус: готовый шаблон Excel с примерами всех рассмотренных методов.
1. Базовый метод: комбинация функций СЧЁТЕСЛИ и ПСТР для простых случаев
Если вам нужно посчитать, сколько раз конкретное слово встречается в ячейке, самый простой способ — использовать комбинацию функций СЧЁТЕСЛИ (или COUNTIF в английской версии) с текстовыми функциями. Этот метод подходит для одного и того же слова, повторяющегося в ячейке, и не требует знания VBA.
Предположим, у вас в ячейке A1 содержится текст: "Excel очень удобный Excel для работы Excel", и вы хотите узнать, сколько раз встречается слово "Excel". Формула будет выглядеть так:
=СЧЁТЕСЛИ(РАЗБТЕКСТ(A1;" ");"Excel")
Но здесь есть подвох: функция РАЗБТЕКСТ (или TEXTSPLIT в новых версиях) разбивает текст по пробелам, но не учитывает регистр и знаки препинания. Чтобы формула работала корректно, текст нужно предварительно очистить от запятых, точек и привести к единому регистру. Для этого добавьте функцию ПОДСТАВИТЬ:
=СЧЁТЕСЛИ(РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ(A1);",";" ");".";" ");" ");"excel")
- ✅ Плюсы: не требует установки надстроек, работает в любых версиях Excel.
- ❌ Минусы: чувствителен к регистру и знакам препинания, не подходит для динамического анализа всех слов в ячейке.
- 🔄 Альтернатива: в Excel 365 можно использовать
TEXTSPLITвместоРАЗБТЕКСТ.
⚠️ Внимание: Если в ячейке есть слова с дефисами (например, "что-то"), функция РАЗБТЕКСТ разобьёт их на два отдельных слова: "что" и "то". Для корректной обработки таких случаев потребуется дополнительная очистка данных.
2. Продвинутый подход: формула массива для подсчёта всех уникальных слов
Что делать, если нужно посчитать все повторяющиеся слова в ячейке, а не только одно конкретное? Здесь на помощь приходят формулы массива. Рассмотрим универсальное решение, которое вернёт количество повторений для каждого слова в отдельной строке.
Допустим, текст находится в ячейке A1, а список уникальных слов с количеством повторений мы хотим вывести в столбец B, начиная с B1. Введите эту формулу как формулу массива (в старых версиях Excel нажмите Ctrl+Shift+Enter):
=ЕСЛИОШИБКА(ИНДЕКС($A$1;ПОИСКПОЗ(0;--(ЧАСТОТА(ЕСЛИ(РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ($A$1);",";" ");".";" ");" ")<>"";РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ($A$1);",";" ");".";" ");" "));РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ($A$1);",";" ");".";" ");" ")));СТРОКА(ДВССЫЛ("1:"&ДЛСТР($A$1))));0));"")
Эта формула:
- Приводит текст к нижнему регистру и удаляет знаки препинания.
- Разбивает текст на отдельные слова.
- Считает частоту каждого слова с помощью
ЧАСТОТА. - Возвращает список уникальных слов с количеством повторений.
| Ячейка A1 | Результат в столбце B |
|---|---|
| Excel удобный, Excel быстрый, Excel надёжный | excel — 3 удобный — 1 быстрый — 1 надёжный — 1 |
| Анализ данных, анализ текста, анализ продаж | анализ — 3 данных — 1 текста — 1 продаж — 1 |
| Тест тест ТЕСТ | тест — 3 |
⚠️ Внимание: В Excel 365 эту формулу можно вводить без Ctrl+Shift+Enter, но в старых версиях (2010–2016) обязательно используйте комбинацию клавиш для активации формулы массива. Иначе результат будет некорректным.
Удалить знаки препинания (запятые, точки, восклицательные знаки)
Привести текст к нижнему регистру
Заменить двойные пробелы на одинарные
Проверить наличие слов с дефисами или апострофами-->
3. Использование Power Query для обработки больших объёмов данных
Если вам нужно проанализировать тысячи строк с текстом, формулы Excel могут замедлить работу файла. В этом случае лучше использовать Power Query — инструмент для преобразования и очистки данных, встроенный в Excel 2016 и новее.
Алгоритм действий:
- Выделите диапазон с текстом и перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите столбец с текстом и нажмите
Преобразовать → Разделить столбец → По разделителю. - В качестве разделителя укажите пробел и другие знаки препинания (запятую, точку с запятой).
- После разделения удалите пустые столбцы и приведите текст к нижнему регистру с помощью команды
Преобразовать → Регистр → нижний. - Выберите столбец с словами и нажмите
Главная → Группировка. В качестве операции укажите Количество строк. - Нажмите
Главная → Закрыть и загрузить, чтобы вернуть данные в Excel.
Результат — таблица с уникальными словами и количеством их повторений во всём диапазоне. Главное преимущество этого метода: обработка происходит на уровне движка Power Query, что в разы быстрее, чем вычисление формул в ячейках.
Как обработать текст с переносами строк?
Если в ячейках есть переносы строк (Alt+Enter), перед загрузкой в Power Query замените их на пробелы с помощью функции ПОДСТАВИТЬ:
=ПОДСТАВИТЬ(A1;СИМВОЛ(10);" ")
где СИМВОЛ(10) — это символ переноса строки.
4. Автоматизация с помощью VBA: макрос для подсчёта повторяющихся слов
Для пользователей, которые регулярно работают с текстовыми данными, наилучшее решение — написать макрос на VBA. Он позволит обработать любые объёмы данных за секунды и гибко настраивать параметры анализа (например, игнорировать стоп-слова или учитывать морфологию).
Вот пример макроса, который подсчитывает повторяющиеся слова в выделенном диапазоне и выводит результат в новом листе:
Sub CountRepeatedWords()
Dim ws As Worksheet, wsResult As Worksheet
Dim rng As Range, cell As Range
Dim dict As Object
Dim words() As String
Dim word As Variant
Dim i As Long, maxCount As Long
' Создаём словарь для хранения слов и их количества
Set dict = CreateObject("Scripting.Dictionary")
' Получаем выделенный диапазон
Set rng = Selection
' Обрабатываем каждую ячейку
For Each cell In rng
' Приводим текст к нижнему регистру и удаляем знаки препинания
words = Split(WorkspaceFunction(cell.Value), " ")
For i = LBound(words) To UBound(words)
If Len(words(i)) > 0 Then
If dict.exists(words(i)) Then
dict(words(i)) = dict(words(i)) + 1
Else
dict.Add words(i), 1
End If
End If
Next i
Next cell
' Создаём новый лист для результатов
Set wsResult = Worksheets.Add
wsResult.Name = "Результаты подсчёта"
' Записываем результаты
wsResult.Range("A1").Value = "Слово"
wsResult.Range("B1").Value = "Количество"
i = 2
For Each word In dict.keys
wsResult.Cells(i, 1).Value = word
wsResult.Cells(i, 2).Value = dict(word)
i = i + 1
Next word
' Форматируем результат
wsResult.Range("A1:B1").Font.Bold = True
wsResult.Columns("A:B").AutoFit
End Sub
Function WorkspaceFunction(text As String) As String
' Удаляем знаки препинания и приводим к нижнему регистру
text = LCase(text)
text = Replace(text, ",", " ")
text = Replace(text, ".", " ")
text = Replace(text, "!", " ")
text = Replace(text, "?", " ")
text = Replace(text, ";", " ")
text = Replace(text, ":", " ")
text = Replace(text, Chr(10), " ") ' Перенос строки
WorkspaceFunction = text
End Function
Чтобы использовать этот макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите диапазон с текстом в Excel и запустите макрос (
F5или черезМакросына вкладкеРазработчик).
⚠️ Внимание: Макрос обрабатывает все выделенные ячейки сразу, а не каждую по отдельности. Если вам нужно проанализировать каждую ячейку отдельно, модифицируйте код, добавив вывод результатов по строкам.
Dim stopWords As Variant
stopWords = Array("и", "в", "на", "за", "из", "по", "с", "к", "у", "о")
...
If Not IsInArray(words(i), stopWords) Then
' Добавление в словарь
End If
...
Function IsInArray(value As String, arr As Variant) As Boolean
Dim i As Long
For i = LBound(arr) To UBound(arr)
If value = arr(i) Then
IsInArray = True
Exit Function
End If
Next i
IsInArray = False
End Function
-->
5. Использование надстройки "Анализ текста" (для Excel 365 и 2019)
Если вы работаете в Excel 365 или Excel 2019, у вас есть доступ к надстройке "Анализ текста" (Text Analytics). Она позволяет быстро анализировать текстовые данные без формул или VBA. Вот как ею пользоваться:
Шаги для подключения и использования:
- Перейдите на вкладку
Вставка → Надстройки(илиHome → Add-insв английской версии). - В поисковой строке введите "Text Analytics" и установите надстройку от Microsoft.
- После установки на новой вкладке появится панель
Анализ текста. - Выделите диапазон с текстом и нажмите
Извлечь ключевые фразыилиАнализ тональности(в зависимости от задачи). - Надстройка автоматически разобьёт текст на слова, посчитает их частоту и визуализирует результат в виде облака тегов или таблицы.
Преимущества этого метода:
- 🔍 Автоматическое игнорирование стоп-слов (предлогов, союзов).
- 📊 Визуализация результатов в виде диаграмм.
- 🌐 Поддержка нескольких языков (включая русский).
Однако у надстройки есть ограничения: она работает только в онлайн-версии Excel 365 или в настольной версии с подключением к интернету (данные отправляются на серверы Microsoft для обработки).
6. Обработка морфологии: как учитывать словоформы (например, "дом" и "дома")
Все предыдущие методы считают точные совпадения слов. Но что делать, если нужно учитывать словоформы? Например, слова "анализ", "анализа" и "анализу" должны восприниматься как одно слово. Для этого потребуется:
- Лемматизация — приведение слов к начальной форме (например, "бегал" → "бежать").
- Использование внешних библиотек (например, Python с модулем
pymorphy2для русского языка). - Интеграция с Excel через Power Query или VBA.
Простейший способ — использовать Python-скрипт прямо в Excel (доступно в Excel 365):
- Перейдите на вкладку
Данные → Получить данные → Из других источников → Python. - Вставьте следующий код (предварительно установите библиотеку
pymorphy2черезpip install pymorphy2):
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
def lemmatize(text):
words = text.lower().split()
lemmas = [morph.parse(word)[0].normal_form for word in words]
return ' '.join(lemmas)
Пример использования (в Excel передайте текст как переменную)
input_text = "Анализируем данные аналитика анализов"
lemmatize(input_text) # Вернёт: "анализировать данный аналитика анализ"
Для автоматизации процесса в Excel:
- Сохраните скрипт в файле
.py. - Используйте Power Query для вызова скрипта и обработки данных.
- Либо напишите макрос на VBA, который будет запускать Python-скрипт и возвращать результаты.
⚠️ Внимание: Лемматизация требует знания Python и установки дополнительных библиотек. Для одноразовых задач проще воспользоваться онлайн-сервисами лемматизации (например, Yandex Speller API или TextMagic) и импортировать результаты в Excel.
Сравнение методов: какой выбрать для вашей задачи?
| Метод | Сложность | Скорость | Подходит для больших данных | Учитывает морфологию |
|---|---|---|---|---|
| Формулы Excel | Низкая | Медленно | ❌ Нет | ❌ Нет |
| Power Query | Средняя | Быстро | ✅ Да | ❌ Нет |
| VBA | Высокая | Очень быстро | ✅ Да | ❌ Нет (без доп. библиотек) |
| Надстройка "Анализ текста" | Низкая | Средне | ✅ Да (онлайн) | ✅ Частично |
| Python + лемматизация | Очень высокая | Очень быстро | ✅ Да | ✅ Да |
Выбор метода зависит от:
- 📊 Объёма данных: для 10–100 строк хватит формул, для тысяч строк нужен Power Query или VBA.
- 🔄 Частоты использования: если задача разовая, подойдёт надстройка; если регулярная — автоматизируйте через VBA.
- 🌍 Языка текста: для русского языка с словоформами потребуется лемматизация.
FAQ: Частые вопросы о подсчёте повторяющихся слов в Excel
Можно ли посчитать повторяющиеся слова в Google Таблицах?
Да, в Google Sheets используйте аналогичные функции, но с другим синтаксисом. Например, для подсчёта слова "Excel" в ячейке A1:
=COUNTIF(SPLIT(LOWER(SUBSTITUTE(SUBSTITUTE(A1;",";" ");".";" "));" ");"excel")
Для анализа всех слов в тексте используйте QUERY + SPLIT или напишите скрипт на Google Apps Script.
Как игнорировать регистр при подсчёте?
Приведите текст к нижнему (или верхнему) регистру с помощью функции НИЖН.РЕГ (или LOWER в английской версии). Например:
=СЧЁТЕСЛИ(РАЗБТЕКСТ(НИЖН.РЕГ(A1);" ");"excel")
Это позволит считать слова "Excel", "EXCEL" и "excel" как одно слово.
Почему формула возвращает #ЗНАЧ!?
Ошибка #ЗНАЧ! обычно возникает по трём причинам:
- В ячейке нет текста (пустая или содержит только знаки препинания).
- Формула массива введена без
Ctrl+Shift+Enter(в Excel 2010–2016). - Используется
РАЗБТЕКСТв версиях Excel старше 2013 (замените наПСТР+ПОИСК).
Проверьте исходные данные и синтаксис формулы.
Как посчитать повторяющиеся слова в диапазоне ячеек, а не в одной?
Для анализа диапазона:
- Объедините текст из всех ячеек в одну с помощью
ОБЪЕДИНИТЬ(илиTEXTJOINв Excel 365). - Примените любой из описанных методов к объединённому тексту.
Пример формулы для объединения диапазона A1:A10:
=ОБЪЕДИНИТЬ(A1:A10;" ")
Есть ли готовые шаблоны для анализа текста в Excel?
Да, вы можете скачать готовые шаблоны:
- 📄 Шаблон с формулами: Скачать (включает примеры из этой статьи).
- 📄 Шаблон с VBA: Скачать (макрос для подсчёта слов с настройками).
Также полезные надстройки можно найти на сайте Microsoft AppSource (вкладка Вставка → Надстройки).