Как посчитать одинаковые слова в Excel: от простых функций до VBA

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

В этой статье мы разберём 5 проверенных способов, как посчитать одинаковые слова в Excel — от элементарных методов для новичков до продвинутых решений для обработки тысяч строк. Вы узнаете, как обойти ограничения программы, избежать типичных ошибок (например, когда ПРОПИСНЫЕ и строчные буквы считаются разными словами) и автоматизировать процесс. А в конце — бонус: готовая таблица с формулами, которую можно скопировать и использовать сразу.

Но прежде чем погружаться в детали, ответьте на один вопрос:

📊 Как часто вам приходится анализировать текстовые данные в Excel?
Ежедневно
Раз в неделю
Редко, но метко
Никогда не делал этого

Если вы работаете с текстами в Excel регулярно, этот гайд сэкономит вам часы времени. Если же только начинаете — не переживайте: мы начнём с самого простого.

1. Подсчёт одинаковых слов в одной ячейке

Допустим, у вас есть ячейка с текстом типа "яблоко банан яблоко груша банан яблоко", и нужно узнать, сколько раз встречается каждое слово. В чистом Excel для этого нет одной функции, но можно обойтись комбинацией ПОДСТАВИТЬ, ДЛСТР и НАЙТИ.

Вот универсальная формула для подсчёта количества вхождений конкретного слова (например, "яблоко") в ячейке A1:

= (ДЛСТР($A1) - ДЛСТР(ПОДСТАВИТЬ($A1; "яблоко"; ""))) / ДЛСТР("яблоко")

Как это работает:

  1. ПОДСТАВИТЬ удаляет все вхождения слова "яблоко" из текста.
  2. ДЛСТР сравнивает длину исходного текста и текста без искомого слова.
  3. Результат делится на длину слова — так мы получаем точное количество повторений.

⚠️ Внимание! Формула чувствительна к регистру. Если в тексте есть "Яблоко" с большой буквы, а вы ищете "яблоко" — они посчитаются как разные слова. Чтобы игнорировать регистр, используйте функцию НИЖН.РЕГ:

= (ДЛСТР($A1) - ДЛСТР(ПОДСТАВИТЬ(НИЖН.РЕГ($A1); "яблоко"; ""))) / ДЛСТР("яблоко")

А что, если нужно посчитать все уникальные слова в ячейке автоматически? Для этого потребуется более сложный подход — об этом в следующем разделе.

2. Автоматический подсчёт всех слов в ячейке (с выводом частотности)

Чтобы вывести список уникальных слов и их количество в одной ячейке, придётся использовать пользовательскую функцию на VBA или комбинацию из нескольких столбцов. Рассмотрим оба варианта.

Способ 1: Без макросов (для Excel 2019 и новее)

Если у вас Excel 365 или Excel 2021, можно обойтись без VBA благодаря функциям ТЕКСТРАЗД и УНИК:

  1. Разбейте текст на слова с помощью =ТЕКСТРАЗД(A1; ;" ") (разделитель — пробел).
  2. Извлеките уникальные слова: =УНИК(ТЕКСТРАЗД(A1; ;" ")).
  3. Подсчитайте частотность каждого слова с =СЧЁТЕСЛИ.

Способ 2: С макросом (работает во всех версиях Excel)

Если у вас старая версия программы, создайте пользовательскую функцию:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль (Insert → Module) и скопируйте этот код:
    Function WordCount(rng As Range, word As String) As Long
    

    Dim arr() As String

    arr = Split(Application.WorksheetFunction.Substitute(rng.Value, ",", " "), " ")

    WordCount = UBound(Filter(arr, word)) + 1

    End Function

  3. Теперь в ячейке можно использовать =WordCount(A1; "яблоко").

⚠️ Внимание! Макрос не учитывает знаки препинания. Если в тексте есть "яблоко," или "яблоко!", они посчитаются отдельно от "яблоко". Чтобы этого избежать, предварительно очистите текст от пунктуации с помощью ПОДСТАВИТЬ.

Удалить запятые и точки (ПОДСТАВИТЬ на пробел)|Привести текст к нижнему регистру (НИЖН.РЕГ)|Разбить текст на отдельные слова (ТЕКСТРАЗД или Split в VBA)|Удалить пустые ячейки (ЕСЛИ + ПУСТО)-->

3. Подсчёт повторяющихся слов в столбце

Если слова распределены по разным ячейкам столбца (например, в A1:A100 перечислены товары), задача упрощается. Здесь поможет комбинация СЧЁТЕСЛИ + УНИК (для новых версий) или сводная таблица (для старых).

Для Excel 2019/365:

=СЧЁТЕСЛИ($A$1:$A$100; УНИК(A1:A100))

Эта формула вернёт массив с количеством каждого уникального слова. Чтобы вывести его в отдельный столбец, нажмите Ctrl + Shift + Enter (в старых версиях) или просто Enter (в новых).

Для Excel 2010—2016:

Создайте сводную таблицу:

  1. Выделите столбец с данными.
  2. Нажмите Вставка → Сводная таблица.
  3. Перетащите поле со словами в область Строки и Значения.
  4. Готово! Сводная таблица автоматически посчитает повторения.

4. Учёт морфологии: подсчёт слов в разных формах

Одна из самых сложных задач — посчитать слова с учётом их форм. Например, "яблоко", "яблока", "яблоку" должны считаться как одно слово. В чистом Excel это невозможно — потребуется внешний инструмент или надстройка.

Вариант 1: Использовать Power Query

Power Query (доступен в Excel 2016 и новее) позволяет подключаться к сервисам лемматизации (приведения слов к начальной форме). Например, можно экспортировать данные в Python через xlwings или использовать API Yandex Speller.

Вариант 2: Надстройка Ablebits

Плагин Ablebits имеет инструмент Text Analysis, который умеет группировать слова по основам. Минус — платная лицензия (~$50).

Вариант 3: Ручное решение (для небольших списков)

Создайте справочник форм слова (например, в столбце B перечислите все варианты: "яблоко", "яблока", "яблоку") и используйте:

=СЧЁТЕСЛИМн($A$1:$A$100; B1:B3)

Как работает лемматизация?

Лемматизация — это процесс приведения слова к его начальной (словарной) форме. Например, "бежал", "бегу", "бежать" преобразуются в лемму "бежать". В русском языке это сложнее, чем в английском, из-за богатой морфологии. Для точного анализа используют специализированные библиотеки, такие как pymorphy2 (Python) или TreeTagger.

5. Визуализация результатов: диаграммы частотности слов

Когда данные посчитаны, их нужно представить наглядно. Для этого подойдут:

  • 📊 Гистограмма — классический вариант для сравнения частотности.
  • 🎯 Круговая диаграмма — если нужно показать долю каждого слова.
  • 📈 Линейчатая диаграмма — для отображения топ-10 самых частых слов.
  • 🌈 Тепловая карта (условное форматирование) — чтобы выделить ячейки с максимальным количеством повторений.

Пример создания гистограммы:

  1. В одном столбце (A) — уникальные слова.
  2. Во втором (B) — их количество.
  3. Выделите оба столбца и нажмите Вставка → Гистограмма.

Для тепловой карты:

  1. Выделите столбец с количеством повторений.
  2. Перейдите в Главная → Условное форматирование → Цветовые шкалы.
  3. Выберите палитру (например, от зелёного к красному).

6. Типичные ошибки и как их избежать

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

Ошибка Причина Решение
Формула возвращает #ЗНАЧ! В тексте есть пустые ячейки или ошибки. Используйте =ЕСЛИОШИБКА(формула; 0).
Слова с разным регистром считаются отдельно. ПОДСТАВИТЬ и НАЙТИ чувствительны к регистру. Приведите текст к нижнему регистру (НИЖН.РЕГ).
Формула не считает слова с дефисами ("что-то"). ТЕКСТРАЗД разбивает текст только по пробелам. Замените дефисы на пробелы предварительно.
Макрос не работает в Excel Online. VBA не поддерживается в веб-версии. Используйте формулы или Power Query.

⚠️ Внимание! Если вы работаете с кириллическими текстами в английской версии Excel, некоторые функции (например, ТЕКСТРАЗД) могут некорректно обрабатывать русские символы. Решение: измените языковые настройки книги на Русский (Россия) в Файл → Параметры → Язык.

7. Продвинутые техники: регулярные выражения и Python

Для сложных задач (например, поиска слов по шаблону или обработки больших текстов) стандартных средств Excel недостаточно. Здесь помогут:

Регулярные выражения (Regex)

В Excel нет встроенной поддержки regex, но можно использовать:

  • 🔧 Надстройку Morefunc (функция =REGEX.REPLACE).
  • 🐍 Python через xlwings (пример кода ниже).

Пример на Python (подсчёт слов с учётом регистра):

import re

from collections import Counter

text = "яблоко банан яблоко груша банан яблоко"

words = re.findall(r'\w+', text.lower()) # игнорируем регистр и пунктуацию

print(Counter(words)) # Output: Counter({'яблоко': 3, 'банан': 2, 'груша': 1})

Интеграция с Power BI

Если вам нужно анализировать тексты регулярно, перенесите данные в Power BI:

  1. Импортируйте таблицу из Excel.
  2. Используйте встроенную функцию Text Analytics для лемматизации.
  3. Стройте интерактивные дашборды.

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

Можно ли посчитать слова в Excel без формул?

Да, но с ограничениями:

  • Используйте сводную таблицу (если слова в разных ячейках).
  • Примените условное форматирование для визуального выделения дублей.
  • В Excel 365 есть функция УНИК, которая упрощает задачу.

Однако для точного подсчёта внутри одной ячейки формулы или VBA всё равно потребуются.

Почему моя формула считает "Москва" и "москва" как разные слова?

Потому что Excel по умолчанию учитывает регистр. Решения:

  • Используйте НИЖН.РЕГ или ВЕРХН.РЕГ, чтобы привести текст к одному регистру.
  • В VBA добавьте LCase перед сравнением: If LCase(word1) = LCase(word2) Then.
Как посчитать слова в диапазоне ячеек, а не в одной?

Если слова разбросаны по нескольким ячейкам (например, A1:A10), сначала объедините их в одну строку:

=СЦЕПИТЬ(A1:A10; " ")

Затем применяйте формулы подсчёта к результату. В Excel 365 можно использовать ТЕКСТСЦЕП:

=ТЕКСТСЦЕП(" "; ИСТИНА; A1:A10)
Можно ли автоматически обновлять подсчёт при изменении данных?

Да, если использовать:

  • Формулы — они пересчитываются автоматически.
  • Сводные таблицы — обновляются по кнопке Обновить или при открытии файла.
  • VBA — добавьте макрос в событие Worksheet_Change, чтобы он срабатывал при редактировании ячеек.
Какая максимальная длина текста, с которой справится Excel?

Ограничения Excel по тексту:

  • 32 767 символов — максимум для одной ячейки.
  • 1 048 576 строк — лимит для листа.
  • 16 384 столбцов (от A до XFD).

Если ваш текст длиннее, разбивайте его на части или используйте Power Query для предварительной обработки.