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

Вы когда-нибудь сталкивались с задачей подсчёта повторяющихся слов в одной ячейке 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 вместо РАЗБТЕКСТ.
⚠️ Внимание: Если в ячейке есть слова с дефисами (например, "что-то"), функция РАЗБТЕКСТ разобьёт их на два отдельных слова: "что" и "то". Для корректной обработки таких случаев потребуется дополнительная очистка данных.
📊 Какой версии Excel вы пользуетесь?
Excel 2010-2016
Excel 2019
Excel 365 (подписка)
Excel для Mac
Другая

2. Продвинутый подход: формула массива для подсчёта всех уникальных слов

Что делать, если нужно посчитать все повторяющиеся слова в ячейке, а не только одно конкретное? Здесь на помощь приходят формулы массива. Рассмотрим универсальное решение, которое вернёт количество повторений для каждого слова в отдельной строке.

Допустим, текст находится в ячейке A1, а список уникальных слов с количеством повторений мы хотим вывести в столбец B, начиная с B1. Введите эту формулу как формулу массива (в старых версиях Excel нажмите Ctrl+Shift+Enter):

=ЕСЛИОШИБКА(ИНДЕКС($A$1;ПОИСКПОЗ(0;--(ЧАСТОТА(ЕСЛИ(РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ($A$1);",";" ");".";" ");" ")<>"";РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ($A$1);",";" ");".";" ");" "));РАЗБТЕКСТ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(НИЖН.РЕГ($A$1);",";" ");".";" ");" ")));СТРОКА(ДВССЫЛ("1:"&ДЛСТР($A$1))));0));"")

Эта формула:

  1. Приводит текст к нижнему регистру и удаляет знаки препинания.
  2. Разбивает текст на отдельные слова.
  3. Считает частоту каждого слова с помощью ЧАСТОТА.
  4. Возвращает список уникальных слов с количеством повторений.
Ячейка 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 и новее.

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

  1. Выделите диапазон с текстом и перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query выберите столбец с текстом и нажмите Преобразовать → Разделить столбец → По разделителю.
  3. В качестве разделителя укажите пробел и другие знаки препинания (запятую, точку с запятой).
  4. После разделения удалите пустые столбцы и приведите текст к нижнему регистру с помощью команды Преобразовать → Регистр → нижний.
  5. Выберите столбец с словами и нажмите Главная → Группировка. В качестве операции укажите Количество строк.
  6. Нажмите Главная → Закрыть и загрузить, чтобы вернуть данные в 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

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите диапазон с текстом в 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. Вот как ею пользоваться:

Шаги для подключения и использования:

  1. Перейдите на вкладку Вставка → Надстройки (или Home → Add-ins в английской версии).
  2. В поисковой строке введите "Text Analytics" и установите надстройку от Microsoft.
  3. После установки на новой вкладке появится панель Анализ текста.
  4. Выделите диапазон с текстом и нажмите Извлечь ключевые фразы или Анализ тональности (в зависимости от задачи).
  5. Надстройка автоматически разобьёт текст на слова, посчитает их частоту и визуализирует результат в виде облака тегов или таблицы.

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

  • 🔍 Автоматическое игнорирование стоп-слов (предлогов, союзов).
  • 📊 Визуализация результатов в виде диаграмм.
  • 🌐 Поддержка нескольких языков (включая русский).

Однако у надстройки есть ограничения: она работает только в онлайн-версии Excel 365 или в настольной версии с подключением к интернету (данные отправляются на серверы Microsoft для обработки).

6. Обработка морфологии: как учитывать словоформы (например, "дом" и "дома")

Все предыдущие методы считают точные совпадения слов. Но что делать, если нужно учитывать словоформы? Например, слова "анализ", "анализа" и "анализу" должны восприниматься как одно слово. Для этого потребуется:

  1. Лемматизация — приведение слов к начальной форме (например, "бегал" → "бежать").
  2. Использование внешних библиотек (например, Python с модулем pymorphy2 для русского языка).
  3. Интеграция с Excel через Power Query или VBA.

Простейший способ — использовать Python-скрипт прямо в Excel (доступно в Excel 365):

  1. Перейдите на вкладку Данные → Получить данные → Из других источников → Python.
  2. Вставьте следующий код (предварительно установите библиотеку 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" как одно слово.

Почему формула возвращает #ЗНАЧ!?

Ошибка #ЗНАЧ! обычно возникает по трём причинам:

  1. В ячейке нет текста (пустая или содержит только знаки препинания).
  2. Формула массива введена без Ctrl+Shift+Enter (в Excel 2010–2016).
  3. Используется РАЗБТЕКСТ в версиях Excel старше 2013 (замените на ПСТР + ПОИСК).

Проверьте исходные данные и синтаксис формулы.

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

Для анализа диапазона:

  1. Объедините текст из всех ячеек в одну с помощью ОБЪЕДИНИТЬ (или TEXTJOIN в Excel 365).
  2. Примените любой из описанных методов к объединённому тексту.

Пример формулы для объединения диапазона A1:A10:

=ОБЪЕДИНИТЬ(A1:A10;" ")
Есть ли готовые шаблоны для анализа текста в Excel?

Да, вы можете скачать готовые шаблоны:

  • 📄 Шаблон с формулами: Скачать (включает примеры из этой статьи).
  • 📄 Шаблон с VBA: Скачать (макрос для подсчёта слов с настройками).

Также полезные надстройки можно найти на сайте Microsoft AppSource (вкладка Вставка → Надстройки).