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

Почему сравнение фамилий в Excel требует особого подхода

Работа с фамилиями в Microsoft Excel — задача, которая только на первый взгляд кажется простой. Дело в том, что фамилии, в отличие от числовых данных или стандартных категорий, имеют уникальные особенности: разный регистр (Иванов vs ИВАНОВ), опечатки (Петроов вместо Петров), двойные фамилии (Иванов-Петров) или разделительные символы (О’Коннор). Стандартные методы сравнения столбцов часто дают сбой именно из-за этих нюансов.

Кроме того, задачи сравнения фамилий бывают разными: кому-то нужно найти полные совпадения для сверки списков, кому-то — выявить уникальные записи в каждом столбце, а кому-то требуется частичное совпадение (например, когда в одном столбце только фамилия, а в другом — ФИО). В этой статье мы разберём все сценарии с практическими примерами, формулами и визуальными инструментами Excel.

Важно понимать: если вы работаете с большими базами (от 10 000 записей), некоторые методы могут значительно тормозить файл. В таких случаях лучше сразу переходить к разделам про Power Query или сводные таблицы — они оптимизированы для обработки больших массивов данных.

Подготовка данных: 3 обязательных шага перед сравнением

Прежде чем приступать к сравнению, необходимо привести оба столбца к единому формату. Это избавит от ложных несовпадений из-за мелочей. Вот что нужно сделать:

  • 🧹 Удалите лишние пробелы. Используйте функцию =ТРИМ() или комбинацию CTRL+H (замена пробелов на ничего). Например, фамилии " Иванов " и "Иванов" без пробелов Excel воспримет как разные значения.
  • 🔤 Приведите к единому регистру. Формула =ПРОПИСН() сделает все буквы заглавными, а =ПРОПНАЧ() — только первые буквы слов. Это важно, если в одном столбце "иванов", а в другом "Иванов".
  • 📛 Разделите составные фамилии. Если в данных есть двойные фамилии через дефис (Петров-Сидоров), решите заранее, как их обрабатывать: как одно целое или как две отдельные части. Для разделения используйте ТЕКСТ.ПОСЛЕ()/ТЕКСТ.ДО() (в новых версиях Excel) или ЛЕВСИМВ()/ПРАВСИМВ().

Пренебрежение этими шагами — главная причина, почему пользователи получают некорректные результаты. Например, если не убрать пробелы, формула =СЧЁТЕСЛИ() не найдёт совпадений там, где они есть. А разный регистр сведёт на нет попытки использовать ВПР().

📊 Как часто вы работаете со списками фамилий в Excel?
Ежедневно
Несколько раз в неделю
Рядом
Первый раз

Метод 1: Простое сравнение с помощью условного форматирования

Если вам нужно визуально выделить совпадения или различия между двумя столбцами, условное форматирование — самый быстрый способ. Он не требует знания формул и работает даже в Excel 2010.

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

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

    Здесь $B:$B — столбец, с которым сравниваем, а A2 — первая ячейка выделенного диапазона.

  5. Задайте формат (например, зелёную заливку для совпадений) и нажмите ОК.

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

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

Формула Что делает Пример результата
=СЧЁТЕСЛИ($B:$B; A2)>0 Выделяет совпадения из столбца A в столбце B Зелёная заливка для фамилий, найденных в обоих списках
=СЧЁТЕСЛИ($B:$B; A2)=0 Выделяет уникальные фамилии в столбце A (нет в B) Красная заливка для фамилий, отсутствующих во втором столбце
=ЕСЛИ(СЧЁТЕСЛИ($B:$B; A2); "Есть"; "Нет") Добавляет столбец с пометками "Есть"/"Нет" Отдельный столбец с текстовой пометкой о наличии совпадения

Метод 2: Формулы для точного сравнения (включая регистр)

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

  • 🔍 Поиск точных совпадений (с учётом регистра):
    =И(НЕ(ЕОШИБКА(ПОИСКПОЗ(A2; $B$2:$B$100; 0))); ТОЧНОЕ(A2; ИНДЕКС($B$2:$B$100; ПОИСКПОЗ(A2; $B$2:$B$100; 0))))

    Эта формула проверяет не только наличие фамилии в втором столбце, но и совпадение регистра.

  • 📌 Вывод уникальных фамилий:
    =ЕСЛИ(СЧЁТЕСЛИ($A$2:$A$100; A2)+СЧЁТЕСЛИ($B$2:$B$100; A2)=1; "Уникальная"; "")

    Пометка появится только для фамилий, которые встречаются всего один раз в обоих столбцах.

  • 🔄 Сравнение с частичным совпадением (например, фамилия в одном столбце, а ФИО — в другом):
    =ЕСЛИ(СУММПРОИЗВ(--(НЕ(ЕОШИБКА(ПОИСК(" "&A2&" "; " "&$B$2:$B$100&" "))))); "Есть"; "Нет")

    Ищет фамилию как часть текста (полезно для столбцов типа "Иванов И.И." vs "Иванов").

Критическая особенность: формулы с ПОИСКПОЗ и ИНДЕКС возвращают ошибку #Н/Д, если совпадений нет. Чтобы скрыть ошибки, оберните формулу в ЕСЛИОШИБКА():

=ЕСЛИОШИБКА(Ваша_формула; "")
Как ускорить работу формул с большими диапазонами?

Если у вас более 50 000 строк, замените диапазоны типа $A$2:$A$10000 на именованные диапазоны или таблицы Excel (Ctrl+T). Это сократит время пересчёта в 2-3 раза. Также отключите автоматический пересчёт формул в Формулы → Параметры вычислений → Вручную и обновляйте данные по кнопке F9.

Метод 3: Power Query для сложных сравнений (большие базы данных)

Если вам нужно сравнить столбцы с десятками тысяч фамилий или применить сложные правила (например, игнорировать отчества, приводить к единому формату), Power Query — лучший выбор. Этот инструмент встроен в Excel 2016+ и Office 365.

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

  1. Выделите оба столбца с фамилиями (можно с заголовками). Перейдите на вкладку Данные → Из таблицы/диапазонаExcel 2016-2019 или Данные → Получить данные → Из таблицы/диапазона в Excel 365).
  2. В открывшемся редакторе Power Query выделите оба столбца, затем на вкладке Главная → Объединить запросы → Объединить.
  3. Выберите тип объединения "Полное внешнее" (чтобы увидеть все фамилии из обоих списков) и нажмите ОК.
  4. В результате появится новый столбец с пометками "Left Anti" (уникальные в первом столбце), "Right Anti" (уникальные во втором) и "Inner" (совпадения).
  5. Нажмите Главная → Закрыть и загрузить, чтобы вернуть данные в Excel.

Power Query автоматически обрабатывает пробелы и регистр, а также позволяет добавлять дополнительные преобразования (например, удалять отчества или инициалы). Главное преимущество — скорость: даже 100 000 строк обрабатываются за секунды.

Удалить пробелы (Текст.Обрезать)

Привести к единому регистру (Текст.ВерхнийРегистр)

Разделить ФИО на отдельные столбцы (Разделить столбец → По разделителю)

Удалить дубликаты (Главная → Удалить строки → Удалить дубликаты)-->

Метод 4: Сводные таблицы для анализа совпадений

Сводные таблицы полезны, когда нужно не только найти совпадения, но и посчитать их количество или сгруппировать по категориям. Например, вы можете узнать, сколько фамилий повторяется в обоих списках, или вывести топ-10 самых частых фамилий.

Инструкция:

  1. Создайте новый столбец с формулой объединения:
    =ЕСЛИОШИБКА(ПОИСКПОЗ(A2; $B$2:$B$100; 0); "Уникальная"; "Совпадение")

    Это добавит метку "Совпадение" или "Уникальная" для каждой фамилии.

  2. Выделите все данные (включая новый столбец) и создайте сводную таблицу: Вставка → Сводная таблица.
  3. Перетащите столбец с фамилиями в область "Строки", а столбец с метками — в "Значения".
  4. Настройте отображение, чтобы увидеть количество совпадений и уникальных записей.

Преимущество этого метода — интерактивность. Вы можете добавлять фильтры (например, показывать только фамилии длиной более 6 символов) или группировать данные по первой букве.

Метод 5: VBA-макрос для автоматического сравнения (для продвинутых)

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

  • Сравнивает два столбца (например, A и B).
  • Выделяет совпадения зелёным, уникальные в первом столбце — жёлтым, уникальные во втором — красным.
  • Создаёт отдельный лист с отчётом.

Код макроса:

Sub CompareNames()

Dim ws As Worksheet

Dim lastRowA As Long, lastRowB As Long

Dim i As Long, j As Long

Dim dict As Object

Set dict = CreateObject("Scripting.Dictionary")

' Создаём словарь фамилий из столбца B

lastRowB = Cells(Rows.Count, "B").End(xlUp).Row

For i = 2 To lastRowB

dict(Cells(i, 2).Value) = 1

Next i

' Сравниваем со столбцом A

lastRowA = Cells(Rows.Count, "A").End(xlUp).Row

For j = 2 To lastRowA

If dict.exists(Cells(j, 1).Value) Then

Cells(j, 1).Interior.Color = RGB(0, 255, 0) ' Зелёный - совпадение

Else

Cells(j, 1).Interior.Color = RGB(255, 255, 0) ' Жёлтый - уникальная в A

End If

Next j

' Выделяем уникальные во втором столбце

For i = 2 To lastRowB

If Not Application.WorksheetFunction.CountIf(Range("A:A"), Cells(i, 2).Value) Then

Cells(i, 2).Interior.Color = RGB(255, 0, 0) ' Красный - уникальная в B

End If

Next i

' Создаём отчёт на новом листе

Sheets.Add.Name = "Отчёт о сравнении"

Range("A1").Value = "Совпадения:"

Range("A2").Value = Application.WorksheetFunction.CountIf(Range("A:A"), "<>") - _

Application.WorksheetFunction.CountIf(Range("A:A"), "") - _

Application.WorksheetFunction.CountIf(Range("A:A"), "Уникальная")

Range("B1").Value = "Уникальные в A:"

Range("B2").Value = Application.WorksheetFunction.CountIf(Range("A:A"), "Уникальная")

Range("C1").Value = "Уникальные в B:"

Range("C2").Value = Application.WorksheetFunction.CountIf(Range("B:B"), "<>") - _

Application.WorksheetFunction.CountIf(Range("B:B"), "") - _

Application.WorksheetFunction.CountIf(Range("A:A"), Range("B:B"))

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Закройте редактор и запустите макрос через Вид → Макросы → CompareNames → Выполнить.
⚠️ Внимание: Перед запуском макроса сохраните файл в формате .xlsm (с поддержкой макросов), иначе функциональность будет потеряна. Также убедитесь, что в настройках безопасности разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройка макросов → Включить все макросы).

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

Даже опытные пользователи Excel допускают ошибки при сравнении фамилий. Вот самые распространённые:

  • 🚫 Игнорирование регистра. Функции СЧЁТЕСЛИ и ВПР не чувствительны к регистру. Если ваша задача — найти точные совпадения (включая заглавные буквы), используйте ТОЧНОЕ() или ПОИСКПОЗ с дополнительной проверкой.
  • 🚫 Пропущенные пробелы или непечатаемые символы. Иногда в данных встречаются символы переноса строки (CHAR(10)) или табуляции (CHAR(9)). Чтобы их удалить, используйте:
    =ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2; СИМВОЛ(10); ""); СИМВОЛ(9); "")
  • 🚫 Сравнение неотсортированных данных. Если фамилии в столбцах не отсортированы, функции вроде ВПР могут пропускать совпадения. Всегда сортируйте данные перед сравнением или используйте ПОИСКПОЗ с параметром 0 (точный поиск).

Ещё одна частая проблема — дубликаты внутри одного столбца. Если фамилия повторяется в столбце A 3 раза, а в столбце B — 2 раза, стандартные методы покажут, что есть совпадения, но не укажут на разницу в количестве. Чтобы это отследить, используйте СЧЁТЕСЛИ с учётом повторений:

=СЧЁТЕСЛИ($A$2:$A$100; A2) - СЧЁТЕСЛИ($B$2:$B$100; A2)
⚠️ Внимание: Если вы работаете с фамилиями на кириллице, убедитесь, что в настройках региональных стандартов Windows выбрана русская раскладка. В противном случае функции вроде ПРОПИСН() могут неправильно обрабатывать буквы "ё", "й", "ъ".

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

Как сравнить фамилии, если в одном столбце только фамилия, а в другом — ФИО?

Используйте формулу с ПОИСК или НАЙТИ, чтобы искать фамилию как часть текста:

=ЕСЛИ(НЕ(ЕОШИБКА(ПОИСК(" "&A2&" "; " "&B2&" "))); "Есть"; "Нет")

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

Можно ли сравнить фамилии в Excel Online?

В Excel Online доступны базовые функции (СЧЁТЕСЛИ, ВПР), но нет Power Query, макросов и части возможностей условного форматирования. Для сложных задач скачайте файл на компьютер и используйте десктопную версию Excel.

Как сравнить фамилии с учётом опечаток (например, "Иванов" vs "Ивановв")?

Для поиска похожих фамилий используйте нечёткое сравнение с функцией РАССТОЯНИЕ.ЛЕВЕНШТЕЙНА (требуется надстройка Fuzzy Lookup или Power Query):

=ЕСЛИ(РАССТОЯНИЕ.ЛЕВЕНШТЕЙН(A2; B2) <= 2; "Похоже"; "Не похоже")

Здесь 2 — максимально допустимое количество различий (можно регулировать). В Power Query для этого есть встроенный алгоритм Fuzzy Matching.

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

Выделите диапазон с результатами (например, столбец с пометками "Совпадение"/"Уникальная"), скопируйте его (Ctrl+C), затем:

  1. Создайте новый файл Excel.
  2. Вставьте данные (Ctrl+V).
  3. Сохраните файл в формате .csv или .xlsx через Файл → Сохранить как.

Для автоматизации экспорта используйте макрос:

Sub ExportResults()

Dim newWorkbook As Workbook

Set newWorkbook = Workbooks.Add

Range("C2:C100").Copy newWorkbook.Sheets(1).Range("A1")

newWorkbook.SaveAs "C:\Temp\Результаты сравнения.xlsx"

newWorkbook.Close

End Sub

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

Ошибка #ЗНАЧ! обычно возникает из-за:

  • Разной длины диапазонов (например, в формуле СЧЁТЕСЛИ($B$2:$B$100; A2), но в столбце A только 50 строк).
  • Наличия пустых ячеек в диапазоне поиска.
  • Использования нетекстовых данных (например, в ячейке ошибка или число).

Решение: проверьте диапазоны на пустые ячейки и используйте ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(СЧЁТЕСЛИ($B$2:$B$100; A2); 0)