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

Повторяющиеся слова в текстовых данных — распространённая проблема при работе с Excel. Они портят внешний вид таблиц, усложняют анализ и могут искажать результаты формул. Например, в ячейке вместо "Отчёт за январь 2026" вы видите "Отчёт за за январь 2026", а в списке клиентов — "ООО ООО Ромашка". Такие ошибки часто возникают при импорте данных из внешних источников, копировании текста с веб-страниц или неаккуратном ручном вводе.

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

  • 🔍 Использовать стандартные функции ТЕКСТРАЗД и ПОДСТАВИТЬ для быстрой очистки;
  • 📊 Применять Power Query для обработки больших массивов данных;
  • ⚡ Автоматизировать процесс с помощью VBA-макросов;
  • ⚠️ Избежать типичных ошибок при работе с текстовыми функциями.

Особое внимание уделено нюансам: что делать, если повторяющиеся слова разделены разными разделителями (пробел, запятая, точка с запятой), как сохранить регистр или учитывать только точные дубли (например, "дом" и "Дом" считать разными словами).

📊 Какой метод удаления дублей вы используете чаще?
Формулы Excel
Power Query
VBA-макросы
Ручная правка
Не знаю, как это делать

1. Метод 1: Формулы ТЕКСТРАЗД + ПОДСТАВИТЬ для простых случаев

Если повторяющиеся слова в строке разделены только пробелами, самый быстрый способ — комбинация функций ТЕКСТРАЗД (или TEXTJOIN в английской версии) и ПОДСТАВИТЬ. Этот метод подходит для Excel 2016 и новее.

Пример формулы для ячейки A1:

=ТЕКСТРАЗД(ЕСЛИОШИБКА(ЕСЛИ(ЧАСТОТА(НАЙТИ(" " & ПОДСТАВИТЬ(" " & $A1 & " ", "  ", " ") & " ", " " & ТРИМ(ПОДСТАВИТЬ(A1, " ", "  ")) & " "), ПОДСТАВИТЬ(" " & $A1 & " ", "  ", " "))=1, ТРИМ(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(" " & $A1 & " ", "  ", " "), НАЙТИ("~", ПОДСТАВИТЬ(" " & $A1 & " ", " ", "~", (N(ЕСЛИ(1, {1,2,3,...}))-1)))+1, НАЙТИ(" ", ПОДСТАВИТЬ(" " & $A1 & " ", " ", "~", (N(ЕСЛИ(1, {1,2,3,...}))-1)) & "~")-НАЙТИ("~", ПОДСТАВИТЬ(" " & $A1 & " ", " ", "~", (N(ЕСЛИ(1, {1,2,3,...}))-1)))-1))))), ""), " ")

👉 Упрощённая версия (работает в большинстве случаев):

=ТЕКСТРАЗД(УНИК(ТЕКСТ.ПОСЛЕ(0&" "&ПОДСТАВИТЬ(A1," ",CHAR(10))&" ",CHAR(10))),1,," ")
⚠️ Внимание: Формула массива! В Excel 365 вводится как обычно, в Excel 2019/2016 — завершайте нажатием Ctrl+Shift+Enter. В старых версиях (2010–2013) этот метод не работает.

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

  1. Функция ПОДСТАВИТЬ заменяет двойные пробелы на одинарные.
  2. ТРИМ убирает лишние пробелы по краям.
  3. ЧАСТОТА анализирует повторения каждого слова.
  4. ТЕКСТРАЗД собирает уникальные слова обратно в строку.

2. Метод 2: Функция TEXTJOIN + UNIQUE (Excel 365 и 2021)

В новых версиях Excel (начиная с 2021 и Office 365) появились мощные функции для работы с текстом и массивами. Комбинация TEXTJOIN и UNIQUE позволяет удалить дубликаты слов за одну формулу:

=TEXTJOIN(" ", TRUE, UNIQUE(TRIM(MID(SUBSTITUTE(" "&A1&" ", " ", REPT(" ", 100)), (ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1, " ", ""))+1))-1)*100+1, 100))))

Разберём по шагам:

  • 🔹 SUBSTITUTE(" "&A1&" ", " ", REPT(" ", 100)) — заменяет пробелы на 100 пробелов (чтобы каждое слово занимало фиксированную длину).
  • 🔹 MID(..., (ROW(...)-1)*100+1, 100) — извлекает каждое слово по отдельности.
  • 🔹 UNIQUE — оставляет только уникальные значения.
  • 🔹 TEXTJOIN — собирает слова обратно в строку.

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

  • ✅ Работает с динамическими массивами (не требует Ctrl+Shift+Enter).
  • ✅ Сохраняет порядок слов.
  • ✅ Учитывает регистр (например, "Excel" и "excel" будут считаться разными словами).
⚠️ Внимание: Если в тексте есть знаки препинания (запятые, точки), предварительно замените их на пробелы или используйте метод 4 (Power Query).

3. Метод 3: Power Query — обработка больших массивов данных

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

  • 📌 Обрабатывать данные без формул (меньше нагрузка на файл).
  • 📌 Сохранять шаги очистки для повторного использования.
  • 📌 Работать с разными разделителями (пробел, запятая, точка с запятой).

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

  1. Выделите диапазон с данными → ДанныеИз таблицы/диапазонаExcel 2016Из таблицы).
  2. В редакторе Power Query выделите столбец → ПреобразоватьРазделить столбецПо разделителю.
  3. Укажите разделитель (пробел) и нажмите ОК. Каждое слово окажется в отдельном столбце.
  4. Выделите все столбцы с словами → ПреобразоватьСтолбец "Удалить дубликаты".
  5. Выделите столбцы → ПреобразоватьОбъединить столбцы (разделитель — пробел).
  6. Нажмите Закрыть и загрузить.

📌 Пример: Исходная строка "машина машина красная" → после обработки "машина красная".

Исходные данные Результат после Power Query
ООО ООО Вега ООО Вега
отчёт отчёт за март отчёт за март
Москва Москва, ул. Ленина Москва, ул. Ленина
директор директор отдела продаж директор отдела продаж

Убедитесь, что текст в одном столбце|Проверьте отсутствие ячеек с ошибками (#Н/Д, #ЗНАЧ!)|Сохраните оригинальные данные (создайте копию листа)|Удалите лишние символы (табуляции, неразрывные пробелы)-->

4. Метод 4: VBA-макрос для автоматической очистки

Если вам нужно регулярно очищать дубликаты или обрабатывать сотни тысяч строк, напишите простой макрос. Он будет работать в любой версии Excel (2010–2023).

Код макроса для удаления повторяющихся слов (сохраняет регистр и порядок):

Sub RemoveDuplicateWords()

Dim rng As Range

Dim cell As Range

Dim words() As String

Dim uniqueWords As Object

Dim i As Long

Dim result As String

' Выбираем диапазон (например, столбец A)

Set rng = Selection

' Создаём коллекцию для уникальных слов

Set uniqueWords = CreateObject("Scripting.Dictionary")

For Each cell In rng

If cell.Value <> "" Then

' Разбиваем текст на слова

words = Split(Application.WorksheetFunction.Trim(cell.Value), " ")

' Очищаем коллекцию

uniqueWords.RemoveAll

' Добавляем слова в коллекцию (дубли игнорируются)

For i = LBound(words) To UBound(words)

If words(i) <> "" Then

uniqueWords(words(i)) = 1

End If

Next i

' Собираем уникальные слова обратно в строку

result = Join(uniqueWords.Keys, " ")

cell.Value = result

End If

Next cell

End Sub

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

  1. Нажмите Alt+F11ВставкаМодуль.
  2. Вставьте код выше.
  3. Вернитесь в Excel, выделите диапазон с данными.
  4. Запустите макрос: Alt+F8 → выберите RemoveDuplicateWordsВыполнить.
⚠️ Внимание: Макрос удаляет все дубликаты слов в выделенном диапазоне без возможности отмены. Перед запуском сохраните резервную копию данных или протестируйте на копии листа.

🔹 Модификации макроса:

  • Чтобы учитывать регистр, замените uniqueWords(words(i)) на uniqueWords(LCase(words(i))).
  • Чтобы сохранять первый дубль (а не последний), измените порядок обработки слов на обратный.
Как обработать запятые и точки с запятой

Чтобы макрос работал с разделителями ",", ";" или ".", замените строку words = Split(Application.WorksheetFunction.Trim(cell.Value), " ") на:

    ' Заменяем все разделители на пробелы

Dim tempStr As String

tempStr = cell.Value

tempStr = Replace(tempStr, ",", " ")

tempStr = Replace(tempStr, ";", " ")

tempStr = Replace(tempStr, ".", " ")

words = Split(Application.WorksheetFunction.Trim(tempStr), " ")

5. Метод 5: Регулярные выражения (для опытных пользователей)

Если вы работаете с сложными шаблонами дубликатов (например, "слово1 слово2 слово1 слово3"), можно использовать регулярные выражения (regex) через VBA. Этот метод требует знаний программирования, но даёт максимальную гибкость.

Пример кода для удаления всех повторяющихся слов (включая несоседние дубли):

Function RemoveAllDuplicates(rng As Range) As String

Dim regex As Object

Dim inputStr As String

Dim outputStr As String

Dim matches As Object

Dim uniqueWords As Object

Dim i As Long

Set regex = CreateObject("VBScript.RegExp")

Set uniqueWords = CreateObject("Scripting.Dictionary")

inputStr = rng.Value

' Настройка regex: ищем все слова (включая кириллицу)

regex.Pattern = "\b[\wа-яА-ЯёЁ]+\b"

regex.Global = True

' Собираем уникальные слова

Set matches = regex.Execute(inputStr)

For i = 0 To matches.Count - 1

uniqueWords(matches(i).Value) = 1

Next i

' Собираем строку обратно

outputStr = Join(uniqueWords.Keys, " ")

RemoveAllDuplicates = outputStr

End Function

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

  • Вставьте код в модуль VBA (как в методе 4).
  • В ячейке используйте формулу: =RemoveAllDuplicates(A1).

🔹 Преимущества regex:

  • ✔ Обрабатывает слова на русском и английском.
  • ✔ Удаляет дубли независимо от их позиции в строке.
  • ✔ Можно доработать для учёта знаков препинания.
⚠️ Внимание: Регулярные выражения в Excel работают медленнее стандартных функций. Не рекомендуется использовать этот метод для обработки более 10 000 строк.

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

При удалении повторяющихся слов пользователи часто сталкиваются с следующими проблемами:

Ошибка Причина Решение
Формула возвращает #ЗНАЧ! В тексте есть символы табуляции (Char(9)) или неразрывные пробелы (Char(160)). Замените их на обычные пробелы: =ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;СИМВОЛ(160);" ");СИМВОЛ(9);" ").
Удаляются все слова Формула или макрос неправильно определяет разделители. Проверьте, какой символ используется как разделитель (пробел, запятая и т.д.).
Порядок слов меняется Функция UNIQUE или СОРТИРОВКА применена к массиву. Используйте методы, сохраняющие порядок (например, TEXTJOIN + INDEX).
Макрос не работает Отключены макросы или неверно указан диапазон. Включите макросы в Файл → Параметры → Центр управления безопасностью.

🔹 Дополнительные советы:

  • 📌 Перед массовой обработкой протестируйте метод на 10–20 строках.
  • 📌 Если важно сохранить знаки препинания, используйте Power Query или VBA.
  • 📌 Для больших файлов (>100 000 строк) отдавайте предпочтение Power Query — он работает быстрее формул.

FAQ: Частые вопросы по удалению дублирующихся слов

Можно ли удалить дубликаты слов, если они разделены запятыми, а не пробелами?

Да. В этом случае:

  • В формулах предварительно замените запятые на пробелы: =ПОДСТАВИТЬ(A1;",";" "), затем примените метод 1 или 2.
  • В Power Query при разделении столбца укажите запятую как разделитель.
  • В VBA модифицируйте код, добавив замену запятых перед обработкой (см. спойлер в методе 4).
Как удалить дубликаты, но сохранить первое вхождение слова (а не последнее)?

По умолчанию большинство методов сохраняют последнее вхождение слова. Чтобы оставить первое:

  • В Power Query используйте Group By с параметром All Rows и выберите первую строку.
  • В VBA измените порядок обработки слов в коллекции Dictionary (см. метод 4).

Пример модифицированного кода для VBA:

    ' Меняем порядок на обратный

For i = UBound(words) To LBound(words) Step -1

If words(i) <> "" And Not uniqueWords.Exists(words(i)) Then

uniqueWords.Add words(i), 1

End If

Next i

Почему после очистки в некоторых ячейках остались лишние пробелы?

Это происходит из-за:

  1. Неразрывных пробелов (Char(160)) — замените их на обычные: =ПОДСТАВИТЬ(A1;СИМВОЛ(160);" ").
  2. Символов табуляции (Char(9)) — используйте =ПОДСТАВИТЬ(A1;СИМВОЛ(9);" ").
  3. Ошибок в формулах — проверьте, что функция ТРИМ применена к итоговому результату.

В Power Query лишние пробелы убираются автоматически при использовании Trim.

Как удалить дубликаты слов в Google Таблицах?

В Google Sheets используйте аналогичный подход с функцией TEXTJOIN:

=TEXTJOIN(" ", TRUE, UNIQUE(SPLIT(A1, " ")))

Для учёта регистра добавьте ARRAYFORMULA:

=TEXTJOIN(" ", TRUE, UNIQUE(ARRAYFORMULA(TRIM(SPLIT(A1, " ")))))

🔹 Ограничение: В бесплатной версии Google Sheets функция UNIQUE работает только с диапазонами, а не с массивами из SPLIT. В этом случае используйте Apps Script (аналог VBA).

Можно ли автоматизировать очистку дублей при импорте данных?

Да, для этого:

  1. В Power Query: Создайте шаблон запроса с очисткой и сохраните его как Шаблон. При следующем импорте применяйте этот шаблон.
  2. В VBA: Напишите макрос, который будет запускаться при открытии файла или импорте данных (событие Workbook_Open).
  3. В Excel 365: Используйте Лямбда-функции для создания пользовательской функции очистки.

Пример Лямбда-функции для Excel 365:

=LAMBDA(text,

LET(

words, TRIM(TEXTSPLIT(text, " ")),

unique_words, UNIQUE(words),

TEXTJOIN(" ", TRUE, unique_words)

)

)(A1)