Как сравнить два списка в Excel на совпадения: от простых формул до Power Query

Сравнение двух списков на совпадения в Microsoft Excel — одна из самых востребованных задач при работе с данными.hether вы сверяете прайс-листы поставщиков, ищете дубликаты в базе клиентов или проверяете актуальность товарных остатков, умение быстро находить общие и уникальные элементы экономит часы ручной работы. Проблема в том, что большинство пользователей ограничиваются примитивным ручным поиском или функцией ПОИСКПОЗ, тогда как в Excel есть как минимум 7 профессиональных методов для таких задач — от элементарных до автоматизированных.

В этой статье мы разберём все актуальные способы — от базовых формул (ЕСЛИ + СЧЁТЕСЛИ) до продвинутых инструментов вроде Power Query и VBA. Вы узнаете, как не только найти совпадения, но и визуализировать их с помощью условного форматирования, а также экспортировать результаты в отдельный отчёт. Особое внимание уделим нюансам работы с большими массивами данных (10 000+ строк) и типичным ошибкам, из-за которых формулы возвращают #Н/Д или #ЗНАЧ!.

1. Базовый метод: функция СЧЁТЕСЛИ для поиска совпадений

Начнём с самого простого и универсального способа, который работает во всех версиях Excel — от 2010 до 2023. Функция СЧЁТЕСЛИ подсчитывает количество вхождений значения из одного списка в другом. Если результат больше 0 — значит, совпадение найдено.

Допустим, у вас есть два столбца: A2:A100 (список 1) и B2:B100 (список 2). Чтобы проверить, какие элементы из первого списка есть во втором, введите в ячейку C2 формулу:

=ЕСЛИ(СЧЁТЕСЛИ($B$2:$B$100; A2)>0; "Есть в обоих"; "Только в списке 1")

Растяните формулу на весь диапазон C2:C100. Теперь в столбце C отобразится статус каждого элемента. Этот метод идеален для небольших списков (до 1 000 строк), но имеет ограничение: не учитывает регистр (т.е. "Иванов" и "иванов" будут считаться совпадением).

  • ✅ Простота: не требует знания сложных функций
  • ✅ Работает в любых версиях Excel
  • ⚠️ Не различает регистр букв
  • ⚠️ Медленно работает с массивами >5 000 строк

2. Продвинутый поиск: ВПР и ИНДЕКС+ПОИСКПОЗ

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

Пример с ВПР:

Допустим, в столбце A у вас имена товаров, а в столбце B — их цены. Во втором списке (столбец D) те же товары, но с другими ценами (столбец E). Чтобы сравнить цены, введите:

=ВПР(A2; $D$2:$E$100; 2; ЛОЖЬ)

Если товар найдён, функция вернёт его цену из второго списка. Если нет — ошибку #Н/Д. Чтобы избежать ошибок, оберните формулу в ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(ВПР(A2; $D$2:$E$100; 2; ЛОЖЬ); "Нет в списке 2")

Для точного поиска с учётом регистра используйте ИНДЕКС+ПОИСКПОЗ:

=ИНДЕКС($E$2:$E$100; ПОИСКПОЗ(1; --($D$2:$D$100=A2); 0))
⚠️ Внимание: Формулы массива (как последняя) вводятся нажатием Ctrl+Shift+Enter в Excel 2019 и старше. В новых версиях (Office 365) достаточно просто Enter.
МетодПреимуществаНедостаткиСкорость на 10 000 строк
СЧЁТЕСЛИПростота, совместимостьНе учитывает регистр~2 сек
ВПРИзвлекает дополнительные данныеМедленнее ИНДЕКС+ПОИСКПОЗ~3 сек
ИНДЕКС+ПОИСКПОЗТочное совпадение, быстрее ВПРСложный синтаксис~1 сек

3. Условное форматирование для визуализации совпадений

Если вам нужно не только найти совпадения, но и выделить их цветом, используйте условное форматирование. Это удобно для быстрого визуального анализа больших списков.

Выделите первый список (например, A2:A100), затем:

  1. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  2. Выберите Использовать формулу для определения форматируемых ячеек.
  3. Введите формулу: =СЧЁТЕСЛИ($B$2:$B$100; A2)>0.
  4. Задайте цвет заполнения (например, зелёный) и нажмите ОК.

Теперь все элементы, которые есть в обоих списках, будут подсвечены. Чтобы выделить уникальные значения (те, что есть только в первом списке), используйте формулу:

=СЧЁТЕСЛИ($B$2:$B$100; A2)=0

и назначьте другой цвет (например, красный).

Как выделить совпадения в ОБОИХ списках одновременно?

1. Сначала примените условное форматирование к первому списку (как описано выше).

2. Повторите те же шаги для второго списка, но в формуле ссылайтесь на первый диапазон: =СЧЁТЕСЛИ($A$2:$A$100; B2)>0.

3. Используйте одинаковый цвет для обоих правил, чтобы визуально объединить совпадения.

4. Power Query: профессиональный инструмент для больших данных

Если вам нужно сравнить списки из десятков тысяч строк или делать это регулярно, Power Query (доступен в Excel 2016+) станет вашим главным помощником. Этот инструмент позволяет не только находить совпадения, но и объединять данные из разных источников, очищать их и автоматизировать отчёты.

Алгоритм действий:

  1. Выделите оба списка и преобразуйте их в "умные таблицы" (Ctrl+T).
  2. Перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона и загрузите оба списка в Power Query.
  3. В редакторе запросов выберите Главная → Объединить запросы → Объединить.
  4. Укажите ключевые столбцы (те, по которым ищутся совпадения) и тип объединения:
    • Внутреннее — только общие элементы
    • Левое внешнее — все элементы из первого списка + совпадения
    • Правое внешнее — все элементы из второго списка + совпадения
    • Полное внешнее — все элементы из обоих списков
  • Нажмите ОК и загрузите результат на новый лист.
  • Power Query генерирует отдельную таблицу с пометками о совпадениях (Match) и уникальных значениях. Главное преимущество этого метода — автоматическое обновление результатов при изменении исходных данных (достаточно кликнуть "Обновить все" на вкладке Данные).

    📊 Какой инструмент вы чаще используете для сравнения списков в Excel?
    Формулы (СЧЁТЕСЛИ, ВПР)
    Условное форматирование
    Power Query
    VBA
    Не знаю, что это

    5. Формулы массива для сложных сравнений

    Если вам нужно не просто найти совпадения, а, например, извлечь все уникальные значения из двух списков или сравнить их с учётом нескольких критериев, пригодятся формулы массива. Они обрабатывают сразу несколько значений и возвращают массив результатов.

    Пример 1: Извлечение уникальных значений из двух списков (тех, что есть только в одном из них):

    =ФИЛЬТР(А2:А100; (СЧЁТЕСЛИ(B2:B100; A2:A100)=0)+(СЧЁТЕСЛИ(A2:A100; A2:A100)>1))

    Эта формула вернёт все элементы из первого списка, которых нет во втором, плюс дубликаты внутри первого списка. Работает только в Excel 365 и Excel 2021.

    Пример 2: Поиск частичных совпадений (например, когда в одном списке "Иванов И.И.", а в другом — "Иванов Иван Иванович"):

    =ФИЛЬТР(A2:A100; ПОИСК(""&B2:B100&""; A2:A100))

    Эта формула найдёт все ячейки в списке A, которые содержат текст из ячеек списка B (даже если это часть строки).

    ⚠️ Внимание: Формулы массива могут значительно замедлять работу Excel при большом количестве данных. Если ваш файл содержит более 50 000 строк, используйте Power Query или VBA.

    Удалить пустые строки|Привести текст к единому регистру (например, =ПРОПИСН())|Удалить лишние пробелы (=СЖПРОБЕЛЫ())|Проверить на опечатки|Отсортировать списки (необязательно, но ускорит некоторые методы)-->

    6. VBA-макрос для автоматизации сравнения

    Для самых сложных задач или регулярного сравнения списков напишите простой макрос на VBA. Например, этот код найдёт все совпадения между двумя столбцами и выведет их в отдельный лист:

    Sub FindMatches()
    

    Dim ws As Worksheet

    Dim list1 As Range, list2 As Range, cell As Range

    Dim matchRow As Long, lastRow1 As Long, lastRow2 As Long

    ' Создаём новый лист для результатов

    Set ws = Worksheets.Add

    ws.Name = "Совпадения"

    ws.Range("A1").Value = "Значение"

    ws.Range("B1").Value = "Позиция в Списке 1"

    ws.Range("C1").Value = "Позиция в Списке 2"

    matchRow = 2

    ' Определяем диапазоны списков

    Set list1 = Worksheets("Лист1").Range("A2:A" & Worksheets("Лист1").Cells(Rows.Count, "A").End(xlUp).Row)

    Set list2 = Worksheets("Лист1").Range("B2:B" & Worksheets("Лист1").Cells(Rows.Count, "B").End(xlUp).Row)

    ' Ищем совпадения

    For Each cell In list1

    If Not IsError(Application.Match(cell.Value, list2, 0)) Then

    ws.Cells(matchRow, 1).Value = cell.Value

    ws.Cells(matchRow, 2).Value = cell.Row

    ws.Cells(matchRow, 3).Value = Application.Match(cell.Value, list2, 0) + 1 ' +1, потому что диапазон начинается с B2

    matchRow = matchRow + 1

    End If

    Next cell

    ' Форматируем результат

    ws.Columns("A:C").AutoFit

    ws.Range("A1:C1").Font.Bold = True

    End Sub

    Чтобы запустить макрос:

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

      • 🔹 Искать совпадения с учётом/без учёта регистра
      • 🔹 Сравнивать не точные значения, а части строк (например, по первым 5 символам)
      • 🔹 Автоматически отправлять результаты по email

      7. Сравнение списков с учётом дополнительных условий

      Часто требуется находить совпадения не по одному, а по нескольким критериям. Например, сравнить списки заказов не только по номеру товара, но и по дате или региону. В таких случаях используйте комбинацию функций или Power Query.

      Пример: Сравнение по двум столбцам (номер товара + дата). Допустим, у вас:

      • Список 1: столбцы A (номер товара) и B (дата)
      • Список 2: столбцы D (номер товара) и E (дата)

    Формула для поиска совпадений:

    =ЕСЛИ(СЧЁТЕСЛИМН($D$2:$D$100; A2; $E$2:$E$100; B2)>0; "Совпадает"; "Не совпадает")

    Для Power Query:

    1. Объедините оба списка по двум ключам (номер товара + дата).
    2. Выберите тип объединения Внутреннее, чтобы оставить только полные совпадения.

    Если нужно сравнить данные с допуском (например, даты отличаются на ±2 дня), используйте формулу:

    =ЕСЛИ(МАКС(ЕСЛИ(($D$2:$D$100=A2)*АБС($E$2:$E$100-B2)<=2; 1; 0))>0; "Совпадает с допуском"; "Не совпадает")
    ⚠️ Внимание: Формулы с несколькими условиями могут сильно тормозить Excel. Для списков более 1 000 строк используйте Power Query или VBA.

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

    Как сравнить два списка, если они находятся в разных файлах Excel?

    Есть три способа:

    1. Формулы с внешними ссылками: Откройте оба файла, в первом файле в формуле укажите путь ко второму. Пример: =СЧЁТЕСЛИ([Книга2.xlsx]Лист1!$A$2:$A$100; A2).
    2. Power Query: Импортируйте данные из второго файла через Данные → Получить данные → Из файла → Из книги Excel.
    3. Копирование данных: Скопируйте второй список в текущий файл на отдельный лист и сравните стандартными методами.

    Совет: Если файлы часто обновляются, используйте Power Query — он позволяет автоматически подгружать актуальные данные.

    Почему формула ВПР возвращает #Н/Д, хотя значение есть в списке?

    Причины и решения:

    • Лишние пробелы: Используйте =СЖПРОБЕЛЫ(A2) для очистки данных.
    • Разный регистр: Приведите оба списка к одному регистру с помощью =ПРОПИСН(A2) или =СТРОЧН(A2).
    • Скрытые символы: Проверьте на наличие непечатаемых символов функцией =КОДСИМВ(ЛЕВСИМВ(A2;1)).
    • Числа vs текст: Если в одном списке число (например, 123), а в другом — текст ("123"), ВПР их не совместит. Используйте =ЗНАЧЕН(A2) для преобразования текста в число.
    Как сравнить списки в Excel Online?

    В веб-версии Excel доступны не все функции, но базовые методы работают:

    • СЧЁТЕСЛИ, ВПР, ИНДЕКС+ПОИСКПОЗ
    • ✅ Условное форматирование
    • Power Query (доступен только в десктопной версии)
    • VBA (не поддерживается)

    Для сложных задач скачайте файл в десктопную версию Excel или используйте Google Таблицы (там есть аналоги QUERY и FILTER).

    Можно ли сравнить списки по нескольким листам одновременно?

    Да, с помощью Power Query или VBA. Пример на Power Query:

    1. Импортируйте данные со всех листов через Данные → Получить данные → Из других источников → Пустая запрос.
    2. В редакторе запросов используйте Excel.CurrentWorkbook(), чтобы получить доступ ко всем таблицам файла.
    3. Объедините запросы по ключевому столбцу.

    Для VBA напишите цикл по всем листам:

    Dim ws As Worksheet
    

    For Each ws In ThisWorkbook.Worksheets

    ' Ваш код сравнения для каждого листа

    Next ws

    Как сохранить результаты сравнения в отдельный файл?

    Способы:

    • Копирование: Выделите результаты и скопируйте в новый файл (Ctrl+N → Ctrl+V).
    • Power Query: После объединения запросов нажмите Главная → Закрыть и загрузить в → Новая книга.
    • VBA: Добавьте в макрос код для создания нового файла:
      Dim newWB As Workbook
      

      Set newWB = Workbooks.Add

      ' Копируем данные

      ThisWorkbook.Worksheets("Совпадения").UsedRange.Copy newWB.Sheets(1).Range("A1")

      ' Сохраняем

      newWB.SaveAs "Путь\к\папке\Результаты.xlsx"