Повторяющиеся слова в текстовых данных — распространённая проблема при работе с Excel. Они портят внешний вид таблиц, усложняют анализ и могут искажать результаты формул. Например, в ячейке вместо "Отчёт за январь 2026" вы видите "Отчёт за за январь 2026", а в списке клиентов — "ООО ООО Ромашка". Такие ошибки часто возникают при импорте данных из внешних источников, копировании текста с веб-страниц или неаккуратном ручном вводе.
В этой статье мы разберём 5 эффективных методов удаления дублирующихся слов — от простых формул для начинающих до автоматизированных решений на Power Query и VBA. Каждый способ проиллюстрирован примерами и адаптирован под разные версии Excel (2010–2023, включая Office 365). Вы узнаете, как:
- 🔍 Использовать стандартные функции
ТЕКСТРАЗДиПОДСТАВИТЬдля быстрой очистки; - 📊 Применять
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) этот метод не работает.
Как это работает:
- Функция
ПОДСТАВИТЬзаменяет двойные пробелы на одинарные. ТРИМубирает лишние пробелы по краям.ЧАСТОТАанализирует повторения каждого слова.ТЕКСТРАЗДсобирает уникальные слова обратно в строку.
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+) — идеальный инструмент для очистки повторяющихся слов в тысячах строк. Он позволяет:
- 📌 Обрабатывать данные без формул (меньше нагрузка на файл).
- 📌 Сохранять шаги очистки для повторного использования.
- 📌 Работать с разными разделителями (пробел, запятая, точка с запятой).
Пошаговая инструкция:
- Выделите диапазон с данными →
Данные→Из таблицы/диапазона(в Excel 2016 —Из таблицы). - В редакторе
Power Queryвыделите столбец →Преобразовать→Разделить столбец→По разделителю. - Укажите разделитель (пробел) и нажмите
ОК. Каждое слово окажется в отдельном столбце. - Выделите все столбцы с словами →
Преобразовать→Столбец "Удалить дубликаты". - Выделите столбцы →
Преобразовать→Объединить столбцы(разделитель — пробел). - Нажмите
Закрыть и загрузить.
📌 Пример: Исходная строка "машина машина красная" → после обработки "машина красная".
| Исходные данные | Результат после 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
Как использовать:
- Нажмите
Alt+F11→Вставка→Модуль. - Вставьте код выше.
- Вернитесь в Excel, выделите диапазон с данными.
- Запустите макрос:
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
Почему после очистки в некоторых ячейках остались лишние пробелы?
Это происходит из-за:
- Неразрывных пробелов (
Char(160)) — замените их на обычные:=ПОДСТАВИТЬ(A1;СИМВОЛ(160);" "). - Символов табуляции (
Char(9)) — используйте=ПОДСТАВИТЬ(A1;СИМВОЛ(9);" "). - Ошибок в формулах — проверьте, что функция
ТРИМприменена к итоговому результату.
В 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).
Можно ли автоматизировать очистку дублей при импорте данных?
Да, для этого:
- В Power Query: Создайте шаблон запроса с очисткой и сохраните его как
Шаблон. При следующем импорте применяйте этот шаблон. - В VBA: Напишите макрос, который будет запускаться при открытии файла или импорте данных (событие
Workbook_Open). - В Excel 365: Используйте
Лямбда-функциидля создания пользовательской функции очистки.
Пример Лямбда-функции для Excel 365:
=LAMBDA(text,
LET(
words, TRIM(TEXTSPLIT(text, " ")),
unique_words, UNIQUE(words),
TEXTJOIN(" ", TRUE, unique_words)
)
)(A1)