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

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

В этой статье разберём 5 рабочих методов: от базовых формул до автоматизации через Power Query и VBA. Каждый способ проиллюстрирован примерами для разных версий Excel (2010–2023), с учётом нюансов работы с регистром, знаками препинания и многоклеточными диапазонами. Если вы никогда не работали с массивами или макросами — не переживайте: мы начнём с самого простого.

⚠️ Важно: Все методы, кроме Power Query, чувствительны к регистру. Слово «Excel» и «EXCEL» будут считаться разными значениями. Если это критично, добавьте функцию НИЖНРЕГ() (или LOWER() в английской версии) для приведения текста к нижнему регистру.

Почему стандартный «Поиск дубликатов» не работает

Многие пользователи пытаются использовать инструмент Условное форматирование → Правила выделения ячеек → Повторяющиеся значения, но он ищет полные совпадения ячеек, а не отдельные слова внутри них. Например, в таблице:

| A1 | B1 |

|------------------|------------------|

| Яблоки, груши | Груши, бананы |

Excel не распознает, что слово «груши» повторяется, потому что сравнивает целиком A1 и B1. То же самое касается функции СЧЁТЕСЛИ() — она считает только полные совпадения ячеек, а не их содержимое.

Чтобы обойти это ограничение, придётся разбирать текст на слова и анализировать каждое отдельно. Далее — способы сделать это с разной степенью автоматизации.

Способ 1: Формула для подсчёта повторений одного слова

Если вам нужно найти, сколько раз конкретное слово (например, «отчёт») встречается в диапазоне ячеек, используйте комбинацию функций:

```excel

=СУММПРОИЗВ(

--(НЕОШИБКА(ПОИСКПОЗ(

" " & "отчёт" & " ";

" " & ПОДСТАВИТЬ(A1:A10; ","; " ") & " ";

0

)))

)

```

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

  1. ПОДСТАВИТЬ() заменяет запятые на пробелы (если слова разделены запятыми).
  2. ПОИСКПОЗ() ищет слово «отчёт» с пробелами по краям, чтобы избежать ложных срабатываний (например, на слово «отчётность»).
  3. --(НЕОШИБКА()) преобразует результаты в единицы и нули для суммирования.

⚠️ Внимание: Формула не учитывает слова в начале/конце ячейки без пробелов (например, «отчёт, яблоки»). Чтобы исправить это, добавьте замену начала/конца строки:

```excel

=СУММПРОИЗВ(

--(НЕОШИБКА(ПОИСКПОЗ(

" " & "отчёт" & " ";

" " & ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1:A10; ","; " "); " "; " ") & " ";

0

)))

)

```

📊 Какую версию Excel вы используете?
Excel 2010–2016
Excel 2019
Office 365/Excel 2021
Другая

Способ 2: Подсчёт всех повторяющихся слов в диапазоне

Чтобы вывести список всех уникальных слов и их количество, потребуется два шага:

Шаг 1: Разбить текст на отдельные слова

Создайте вспомогательный столбец с формулой (предположим, исходные данные в A1:A10):

```excel

=ТРАНСП(РАЗБИТЬТЕКСТ(ТЕКСТСОЕДИНИТЬ(";"&A1:A10&";");";";",";ИСТИНА))

```

Эта формула:

  • Объединяет все ячейки в одну строку через точку с запятой (ТЕКСТСОЕДИНИТЬ).
  • Разбивает строку по запятым и пробелам (РАЗБИТЬТЕКСТ).
  • Транспонирует результат в столбец (ТРАНСП).

⚠️ Внимание: РАЗБИТЬТЕКСТ() и ТЕКСТСОЕДИНИТЬ() доступны только в Excel 365 и 2021. Для старых версий используйте Power Query (способ 4).

Шаг 2: Подсчитать уникальные значения

В соседнем столбце добавьте:

```excel

=СЧЁТЕСЛИ($B$1:B1; B1)

```

Где B1 — первая ячейка со словами. Затем отсортируйте данные по убыванию, чтобы увидеть самые частые слова.

Удалить лишние знаки препинания (точки, восклицательные знаки)

Заменить табуляции и переносы строк на пробелы

Привести текст к нижнему регистру (если нужен регистронезависимый поиск)

Проверить отсутствие пустых ячеек-->

Способ 3: Использование сводной таблицы (без формул)

Если у вас Excel 2016 или новее, можно обойтись без формул:

  1. Выделите диапазон с текстом.
  2. Перейдите на вкладку Вставка → Таблица (или нажмите Ctrl+T).
  3. В меню Работа с таблицами → Конструктор включите строку итогов.
  4. В строке итогов выберите Счёт (или Count).
  5. Скопируйте столбец с данными и вставьте его через Специальная вставка → Транспонировать.
  6. Создайте сводную таблицу на основе транспонированных данных, перетащив поле со словами в области Строки и Значения.

Этот метод подходит для быстрого анализа небольших объёмов данных (до 10 000 строк), но не учитывает знаки препинания и регистр.

МетодПлюсыМинусыПодходит для версий
Формулы (СУММПРОИЗВ)Не требует дополнительных инструментовСложно редактировать, чувствителен к регистру2010–2023
Сводная таблицаВизуально наглядно, быстроНе обрабатывает знаки препинания2016–2023
Power QueryОбрабатывает большие данные, гибкая настройкаТребует изучение интерфейса2010–2023
VBAМаксимальная автоматизация, работает с любыми даннымиТребует знания программирования2010–2023

Способ 4: Power Query для сложных текстов

Power Query (или Get & Transform в Excel 2016+) — самый мощный инструмент для работы с текстом. Он позволяет:

  • 🔹 Разбивать текст на слова с учётом любых разделителей.
  • 🔹 Удалять стоп-слова (предлоги, союзы).
  • 🔹 Приводить текст к нижнему регистру.
  • 🔹 Группировать и считать повторения за один шаг.

Пошаговая инструкция:

  1. Выделите диапазон с текстом и нажмите Данные → Из таблицы/диапазона (или Data → From Table/Range).
  2. В открывшемся редакторе Power Query выделите столбец с текстом, затем:
    • Перейдите на вкладку Преобразовать → Разделить столбец → По разделителю.
    • Укажите разделители: пробел, запятая, точка с запятой, табуляция.
    • Нажмите ОК — текст разобьётся на отдельные слова в новых строках.
  3. Выделите новый столбец со словами, затем:
    • Нажмите Преобразовать → Формат → НИЖНРЕГ (для регистронезависимого поиска).
    • Удалите пустые строки: Главная → Удалить строки → Удалить пустые.
  • Группируйте данные: Главная → Группировать по.
    • Выберите столбец со словами.
    • Операция: Счёт.
    • Назовите новое поле (например, «Количество»).
    • Нажмите Главная → Закрыть и загрузить, чтобы вернуть данные в Excel.
    • Способ 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

      ```

      Как использовать:

      1. Нажмите Alt + F11, чтобы открыть редактор VBA.
      2. Вставьте код в новый модуль (Insert → Module).
      3. Запустите макрос (F5) или назначьте его на кнопку.

    ⚠️ Внимание: Макрос чувствителен к символам-разделителям. Если в тексте используются другие знаки (например, двоеточия или тире), добавьте их в функцию 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 Таблицах также есть встроенный инструмент Анализ данных → Частотность слов (доступен через надстройки).

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

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

    1. В диапазоне есть пустые ячейки. Используйте ЕСЛИ(A1="";"";формула).
    2. Слово не найдено. Добавьте проверку ЕСЛИОШИБКА().
    3. Несовпадение типов данных. Убедитесь, что искомое слово — текст (оберните в ТЕКСТ()).
    Как посчитать повторения фраз (не отдельных слов)?

    Для поиска фраз (например, «отчёт за месяц») модифицируйте формулу:

    ```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 не поддерживает облака слов напрямую, но есть обходные пути:

    1. Экспортируйте данные в Python (библиотека wordcloud) или R (пакет wordcloud2).
    2. Используйте надстройки:
      • Для Windows: Ablebits (плагин Text Tools).
      • Для Mac: WordCloud.app (внешнее ПО).
  • Создайте гистограмму в Excel:
    • Отсортируйте слова по убыванию частотности.
    • Вставьте столбчатую диаграмму (Вставка → Гистограмма).
    • Настройте ось X для отображения слов под углом (правый клик → Формат оси).