Работа с большими таблицами в Microsoft Excel часто требует поиска повторяющихся данных — будь то проверка на дубликаты в базе клиентов, сверка прайс-листов или анализ транзакций. Но что делать, если одинаковые значения разбросаны по разным столбцам? Стандартные функции вроде УДАЛИТЬ ДУБЛИКАТЫ здесь бессильны: они ищут повторы только в пределах одного столбца или строки.
В этой статье вы найдёте 7 проверенных методов — от элементарных формул до автоматизированных решений с Power Query. Мы разберём, как выделить совпадения визуально, извлечь их в отдельный список или даже удалить с сохранением уникальных записей. Все примеры адаптированы для Excel 2010–2023 и Office 365, с учётом особенностей каждой версии.
Особое внимание уделим трем ключевым сценариям:
- 🔍 Поиск точных совпадений (например, одинаковые артикулы в столбцах
AиD) - 📊 Сравнение с учётом регистра (когда "Иванов" и "иванов" считаются разными значениями)
- 🔄 Динамическая сверка (автоматическое обновление результатов при изменении исходных данных)
Прежде чем переходить к инструкциям, ответьте на один вопрос — это поможет нам сфокусироваться на самых актуальных для вас методах:
1. Простейший способ: условное форматирование
Если вам нужно визуально выделить одинаковые ячейки в разных столбцах, но не требуется их извлекать или анализировать — условное форматирование справится за 3 клика. Метод работает во всех версиях Excel и не требует знания формул.
Допустим, у вас есть два столбца с данными: A2:A100 (список товаров от поставщика 1) и C2:C100 (список от поставщика 2). Чтобы найти совпадения:
- Выделите диапазон
A2:A100. - Перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите тип правила:
Использовать формулу для определения форматируемых ячеек. - Введите формулу:
=СЧЁТЕСЛИ($C$2:$C$100; A2)>0 - Задайте формат (например, заливку красным цветом) и нажмите
ОК.
Теперь все ячейки в столбце A, которые имеют совпадения в столбце C, будут подсвечены. Важно: формула чувствительна к регистру — "Товар1" и "товар1" будут считаться разными значениями.
2. Формулы для поиска дубликатов: СЧЁТЕСЛИ, ВПР, ИНДЕКС-ПОИСКПОЗ
Когда нужно не только выделить, но и получить список совпадений или их количество, на помощь приходят формулы. Рассмотрим три варианта — от самого простого к продвинутому.
2.1. СЧЁТЕСЛИ для подсчёта совпадений
Формула СЧЁТЕСЛИ вернёт количество повторений значения из одной ячейки в другом столбце. Например, чтобы узнать, сколько раз товар из A2 встречается в столбце C:
=СЧЁТЕСЛИ($C$2:$C$100; A2)
Если результат > 0 — совпадение есть. Чтобы автоматически вывести "ДА"/"НЕТ", оберните формулу в ЕСЛИ:
=ЕСЛИ(СЧЁТЕСЛИ($C$2:$C$100; A2)>0; "ДА"; "НЕТ")
2.2. ВПР для извлечения совпадающих данных
Функция ВПР (или VLOOKUP в английской версии) позволяет найти значение в одном столбце и вернуть соответствующее значение из другого. Например, если в столбце A у вас артикулы, а в C — цены, и нужно проверить, есть ли артикул из A2 в столбце E (другой прайс-лист), используйте:
=ЕСЛИОШИБКА(ВПР(A2; $E$2:$F$100; 2; ЛОЖЬ); "Нет совпадения"; "Есть в прайсе")
Здесь ЕСЛИОШИБКА обрабатывает случай, когда совпадение не найдено.
2.3. ИНДЕКС-ПОИСКПОЗ для гибкого поиска
Комбинация ИНДЕКС + ПОИСКПОЗ более универсальна, чем ВПР, так как позволяет искать совпадения в любом столбце, а не только в первом. Например, чтобы найти позицию товара из A2 в диапазоне C2:C100:
=ПОИСКПОЗ(A2; $C$2:$C$100; 0)
Если результат не #Н/Д, то совпадение есть. Чтобы вернуть само значение (например, цену из соседнего столбца D), используйте:
=ЕСЛИОШИБКА(ИНДЕКС($D$2:$D$100; ПОИСКПОЗ(A2; $C$2:$C$100; 0)); "Нет данных")
Почему ПОИСКПОЗ лучше ВПР?
Функция ПОИСКПОЗ (или MATCH) имеет три ключевых преимущества:
1. Работает с данными, расположенными справа от искомого столбца (в отличие от ВПР, который ищет только влево).
2. Быстрее обрабатывает большие массивы данных.
3. Может использоваться для двустороннего поиска (например, найти совпадения в обоих направлениях между столбцами A и C).
3. Поиск дубликатов с учётом регистра
По умолчанию Excel игнорирует регистр при сравнении текста: "Иванов" и "иванов" для него идентичны. Если это критично (например, при работе с логинами или серийными номерами), используйте массивные формулы или Power Query.
3.1. Формула с ПОИСКПОЗ и ТОЧНОЕ
Функция ТОЧНОЕ (или EXACT) сравнивает строки с учётом регистра. Чтобы найти все совпадения между столбцами A и C:
=ЕСЛИ(СУММПРОИЗВ(--(ТОЧНОЕ(A2; $C$2:$C$100))); "Есть совпадение"; "")
Это массивная формула — после ввода нажмите Ctrl+Shift+Enter (в Excel 365 достаточно просто Enter).
3.2. Power Query для чувствительного к регистру поиска
Если данных много (тысячи строк), формулы будут тормозить. В этом случае:
- Выделите исходные данные и нажмите
Данные → Из таблицы/диапазона(в Excel 2016+). - В редакторе Power Query добавьте пользовательский столбец с формулой:
= Table.AddColumn(#"Предыдущий шаг", "Совпадение", each List.Contains(Text.Split(Text.Upper([Столбец1]), "#(lf)"), Text.Upper([Столбец2]))) - Замените
Столбец1иСтолбец2на реальные имена ваших столбцов.
📋 Преобразуйте диапазон в таблицу (Ctrl+T)
🔤 Убедитесь, что в заголовках нет пробелов или специальных символов
🔍 Проверьте данные на наличие скрытых пробелов (=ПРОБЕЛЫ(A2)=A2)
📊 Сохраните резервную копию файла перед импортом
-->
4. Поиск частичных совпадений (неточный поиск)
Иногда требуется найти не точные дубликаты, а ячейки с общим фрагментом текста. Например, в одном столбце "ООО Ромашка", а в другом — "Ромашка ЛТД". Для этого подойдут функции ПОИСК, НАЙТИ или регулярные выражения (в Power Query).
4.1. Формула с ПОИСК
Чтобы проверить, содержится ли текст из A2 в любой ячейке столбца C:
=ЕСЛИ(СУММПРОИЗВ(--(НЕ(ЕОШИБКА(ПОИСК(A2; $C$2:$C$100))))); "Есть частичное совпадение"; "")
Для обратного поиска (проверки, содержится ли фрагмент из C2 в A2) поменяйте местами диапазоны.
4.2. Power Query: разделить текст и сравнить
Если нужно найти совпадения по первым словам или определённым символам:
- Загрузите данные в Power Query.
- Добавьте пользовательский столбец, извлекающий нужный фрагмент (например, первые 5 символов):
= Text.Start([Столбец1], 5) - Сравните полученные значения с другим столбцом.
5. Автоматизация: макрос для поиска дубликатов
Если вам регулярно приходится искать совпадения в разных столбцах, имеет смысл записать макрос. Ниже приведён код, который выделит цветом все дубликаты между двумя выбранными диапазонами:
Sub FindDuplicatesAcrossColumns()
Dim rng1 As Range, rng2 As Range
Dim cell1 As Range, cell2 As Range
Dim color As Long: color = RGB(255, 150, 150) 'Светло-красный
'Задайте диапазоны для сравнения (например, A2:A100 и C2:C100)
Set rng1 = Range("A2:A100")
Set rng2 = Range("C2:C100")
'Сброс предыдущего форматирования
rng1.Interior.ColorIndex = xlNone
rng2.Interior.ColorIndex = xlNone
'Поиск совпадений
For Each cell1 In rng1
For Each cell2 In rng2
If cell1.Value = cell2.Value Then
cell1.Interior.Color = color
cell2.Interior.Color = color
End If
Next cell2
Next cell1
End Sub
Чтобы использовать этот макрос:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Измените диапазоны
Range("A2:A100")иRange("C2:C100")на свои. - Запустите макрос нажатием
F5.
Преимущество макроса: он работает в сотни раз быстрее формул на больших массивах данных (10 000+ строк). Однако требует базовых знаний VBA для адаптации под свои задачи.
If cell1.Value <> "" And cell2.Value <> "" Then-->
6. Продвинутый метод: Power Query для сложных сравнений
Power Query (или Get & Transform в Excel 2016+) — это инструмент для сложной обработки данных, который справится даже с миллионом строк. Рассмотрим, как с его помощью найти дубликаты между двумя столбцами и выгрузить результат в новую таблицу.
6.1. Пошаговая инструкция
- Загрузите данные: выделите оба столбца (например,
A1:C100) и нажмитеДанные → Из таблицы/диапазона. - Объедините таблицы:
- Перейдите на вкладку
Главная → Объединить запросы → Объединить. - Выберите первый столбец (
A) и второй столбец (C). - Укажите тип объединения:
Внутреннее(только совпадения) илиЛевое внешнее(все данные из первого столбца + совпадения).
- Перейдите на вкладку
6.2. Пример на M-коде
Если вам нужно автоматизировать процесс, вот готовый код для Power Query, который находит совпадения между столбцами Column1 и Column2:
let
Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
// Находим дубликаты между Column1 и Column2
Duplicates = Table.SelectRows(Source, each List.Contains(List.Buffer(Table.Column(Source, "Column2")), [Column1])),
// Добавляем столбец с пометкой "Дубликат"
Result = Table.AddColumn(Duplicates, "Статус", each "Дубликат в Column2")
in
Result
Этот код создаст новую таблицу только с дублирующимися строками.
6.3. Сравнение нескольких столбцов
Чтобы найти совпадения между тремя и более столбцами, используйте функцию Table.Group:
let
Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
// Группируем по значению и считаем количество вхождений
Grouped = Table.Group(Source, {"Column1"}, {{"Count", each Table.RowCount(_), type number}}),
// Фильтруем только дубликаты (встречаются более 1 раза)
Duplicates = Table.SelectRows(Grouped, each [Count] > 1)
in
Duplicates
Как ускорить работу Power Query?
1. Отключите загрузку промежуточных данных: в настройках запроса снимите галочку Включить загрузку в модель данных, если она не нужна.
2. Используйте буферизацию: оберните столбцы в List.Buffer (как в примере выше) — это ускорит повторные обращения к данным.
3. Разделите большие запросы: если данных >100 000 строк, разбейте их на части и объедините результаты потом.
7. Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при поиске дубликатов. Вот 5 самых распространённых ошибок и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| Формула не находит очевидные дубликаты | В ячейках есть скрытые пробелы или непечатаемые символы | Используйте =ПРОБЕЛЫ(A2)=A2 для проверки. При необходимости очистите данные: =СЖПРОБЕЛЫ(A2) |
| Условное форматирование не работает | Неверно указан абсолютный/относительный диапазон в формуле | Проверьте символы $ в формуле. Например, $C$2:$C$100 (фиксированный диапазон) vs C2:C100 (относительный) |
Макрос выдаёт ошибку 1004 |
Диапазоны в коде не соответствуют реальным данным | Обновите диапазоны в макросе (например, Range("A2:A100") на Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) для динамического определения последней строки) |
| Power Query "зависает" | Слишком много данных или неоптимизированный запрос | Разбейте данные на части или используйте Table.Buffer для ускорения |
| Формулы массива тормозят файл | Слишком много вычислений на большом диапазоне | Замените формулы на Power Query или макрос, либо сузьте диапазон (например, A2:A1000 вместо A:A) |
⚠️ Внимание: Если вы работаете с данными, импортированными изCSVили базы данных, проверьте их на наличие невидимых символов (например, табуляции или переводов строк). Для этого используйте функцию=КОДСИМВ(ЛЕВСИМВ(A2))— она вернёт код первого символа в ячейке. Нормальные буквы и цифры имеют коды 48–57 (цифры), 65–90 (заглавные буквы), 97–122 (строчные).
Ещё одна распространённая проблема — разные форматы ячеек. Например, число "1000" и текст "1000" для Excel — разные значения. Чтобы привести данные к одному формату, используйте:
- 📌 Для чисел:
=ЗНАЧЕН(A2) - 📌 Для текста:
=ТЕКСТ(A2; "0")(преобразует число в текст)
FAQ: Ответы на частые вопросы
Можно ли найти дубликаты в разных листах?
Да. В формулах укажите имя листа перед диапазоном, например:
=СЧЁТЕСЛИ(Лист2!$A$2:$A$100; A2)
В Power Query загрузите оба листа как отдельные таблицы, затем объедините их (Объединить запросы).
Как найти дубликаты в столбцах с разным количеством строк?
Используйте динамические диапазоны. Например, для столбца A (где данные до последней заполненной ячейки):
=СЧЁТЕСЛИ($C$2:INDEX($C:$C; СЧЁТЗ($C:$C)); A2)
Или в Power Query объедините таблицы по ключевому столбцу без привязки к количеству строк.
Почему ВПР не находит совпадения, хотя они есть?
Вероятные причины:
- 🔹 Четвёртый аргумент
ВПРустановлен вИСТИНА(поиск приблизительный). Замените наЛОЖЬ. - 🔹 В искомом столбце есть скрытые символы (пробелы, неразрывные пробелы). Проверьте функцией
=ДЛСТР(A2)— если длина больше ожидаемой, очистите данные. - 🔹 Данные в разных форматах (текст vs число). Используйте
=ТИП(A2)для проверки.
Как удалить строки, где есть дубликаты в разных столбцах?
Способ 1: Фильтрация:
- Добавьте вспомогательный столбец с формулой проверки на дубликат (например,
=СЧЁТЕСЛИ($C$2:$C$100; A2)>0). - Отфильтруйте строки, где результат
ЛОЖЬ. - Скопируйте отфильтрованные данные на новый лист.
Способ 2: Power Query:
let
Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
// Удаляем строки, где Column1 встречается в Column2
Filtered = Table.SelectRows(Source, each not List.Contains(Table.Column(Source, "Column2"), [Column1]))
in
Filtered
Можно ли автоматически обновлять список дубликатов?
Да, если использовать:
- 📊 Таблицы Excel: преобразуйте диапазон в таблицу (
Ctrl+T), тогда формулы будут автоматически расширяться. - 🔄 Power Query: настройте запрос и обновите его по кнопке
Обновить все(или по расписанию в Excel 365). - 🖥️ Макрос: добавьте вызов процедуры в событие
Worksheet_Change, чтобы она запускалась при изменении данных.