Сортировка по фамилии в Excel: от базовой до продвинутой

Если в вашей таблице Excel фамилии записаны в одном столбце вместе с именем и отчеством (например, Иванов Петр Сидорович), стандартная сортировка по алфавиту расположит записи по первому слову — то есть по имени. Чтобы отсортировать список именно по фамилиям, требуется либо предварительно разделить ФИО на отдельные столбцы, либо использовать специальные формулы. В 90% случаев проблема возникает из-за неправильного формата исходных данных: Excel воспринимает ячейку как единый текстовый блок, а не как структурированную запись.

В этой статье разберём 5 рабочих методов сортировки по фамилиям — от элементарного разделения текста по пробелам до автоматизированных макросов для больших баз данных. Все способы протестированы на Excel 2019 и Microsoft 365, но подходят и для версий 2010–2016 с минимальными корректировками. Особое внимание уделим случаям, когда фамилии записаны в формате Фамилия И.О. или содержат дефисы/двойные фамилии (например, Петрова-Иванова А.С.).

1. Подготовка данных: почему стандартная сортировка не работает

Перед тем как сортировать, проверьте структуру ваших данных. Если в одной ячейке хранятся фамилия, имя и отчество (например, Сидоров Алексей Петрович), Excel при сортировке будет ориентироваться на первый символ ячейки — то есть на букву "С" (Сидоров) или "А" (Алексей). Это приводит к хаотичному порядку, где фамилии на "А" окажутся в конце списка, а на "Я" — в начале.

Основные причины сбоев сортировки:

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

Чтобы избежать ошибок, выполните предварительную обработку:

  1. Удалите лишние пробелы функцией =СЖПРОБЕЛЫ().
  2. Проверьте, нет ли объединённых ячеек (выделите таблицу и нажмите Главная → Объединить и поместить в центре — если кнопка подсвечена, ячейки объединены).
  3. Приведите все записи к единому формату (например, только Фамилия И.О.).
⚠️ Внимание: Если в таблице есть скрытые столбцы, Excel их проигнорирует при сортировке. Перед началом отобразите все данные через Главная → Формат → Скрыть/отобразить → Отобразить столбцы.

2. Способ 1: Разделение ФИО на столбцы и сортировка

Самый надёжный метод — разбить полное ФИО на отдельные столбцы (Фамилия, Имя, Отчество), а затем сортировать по столбцу с фамилиями. Это гарантирует 100% точность, даже если в данных есть инициалы или двойные фамилии.

Как разбить ФИО:

  1. Добавьте справа от исходного столбца 2–3 пустых столбца (для фамилии, имени, отчества).
  2. В первом новом столбце (например, B2) введите формулу для извлечения фамилии:
    =ЛЕВСИМВ(A2;НАЙТИ(" ";A2;1)-1)

    где A2 — ячейка с полным ФИО.

  3. Для имени используйте:
    =ПСТР(A2;НАЙТИ(" ";A2;1)+1;НАЙТИ(" ";A2;НАЙТИ(" ";A2;1)+1)-НАЙТИ(" ";A2;1)-1)
  4. Для отчества:
    =ПРАВСИМВ(A2;ДЛСТР(A2)-НАЙТИ(" ";A2;НАЙТИ(" ";A2;1)+1))
  5. Растяните формулы на весь столбец, затем скопируйте значения (Ctrl+C → ПКМ → Значения) и удалите исходный столбец с ФИО.

Теперь отсортируйте таблицу по столбцу с фамилиями:

  1. Выделите диапазон данных (включая заголовки).
  2. Перейдите на вкладку Данные → Сортировка.
  3. В поле Сортировать по выберите столбец с фамилиями.
  4. Укажите порядок (От А до Я или От Я до А) и нажмите OK.

Удалить лишние пробелы в ячейках|Проверить на объединённые ячейки|Привести все ФИО к единому формату|Создать резервную копию таблицы-->

3. Способ 2: Сортировка без разделения (формула для извлечения фамилии)

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

Формула для извлечения фамилии (предполагает формат Фамилия Имя Отчество):

=ЛЕВСИМВ(A2;НАЙТИ(" ";A2)-1)

Для формата Имя Фамилия Отчество (например, в западных базах данных) используйте:

=ПСТР(A2;НАЙТИ(" ";A2)+1;НАЙТИ(" ";A2;НАЙТИ(" ";A2)+1)-НАЙТИ(" ";A2)-1)

После добавления вспомогательного столбца:

  1. Скопируйте формулу на все строки.
  2. Выделите весь диапазон данных (включая вспомогательный столбец).
  3. Отсортируйте по вспомогательному столбцу (Данные → Сортировка).
  4. После сортировки вспомогательный столбец можно скрыть или удалить.
⚠️ Внимание: Если в фамилиях есть пробелы (например, ван дер Ваальс), формула выше вернёт только первую часть (ван). Для таких случаев используйте модифицированную формулу с учётом количества пробелов или разделяйте данные вручную.

В одной ячейке (Фамилия Имя Отчество)|В одной ячейке (Имя Фамилия)|В отдельных столбцах|Использую инициалы (Фамилия И.О.)-->

4. Способ 3: Сортировка по фамилии в формате "Фамилия И.О."

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

  1. Добавьте вспомогательный столбец с формулой, которая приводит все записи к единому формату. Например, для преобразования Иванов Иван Петрович в Иванов И.П.:
    =ЛЕВСИМВ(A2;НАЙТИ(" ";A2)-1)&" "&СИМВОЛ(ПРОПНАЧ(ЛЕВСИМВ(ПСТР(A2;НАЙТИ(" ";A2)+1;1))))&"."&СИМВОЛ(ПРОПНАЧ(ЛЕВСИМВ(ПСТР(A2;НАЙТИ(" ";A2;НАЙТИ(" ";A2)+1)+1;1))))&"."
  2. Отсортируйте таблицу по вспомогательному столбцу.

Для обратного преобразования (Иванов И.П.Иванов Иван Петрович) потребуется база полных имён или ручная правка.

Исходный формат Формула для извлечения фамилии Пример результата
Фамилия Имя Отчество =ЛЕВСИМВ(A2;НАЙТИ(" ";A2)-1) Для Иванов Алексей ПетровичИванов
Имя Фамилия Отчество =ПСТР(A2;НАЙТИ(" ";A2)+1;НАЙТИ(" ";A2;НАЙТИ(" ";A2)+1)-НАЙТИ(" ";A2)-1) Для Алексей Иванов ПетровичИванов
Фамилия И.О. =ЛЕВСИМВ(A2;НАЙТИ(" ";A2)-1) Для Иванов А.П.Иванов
Фамилия-Имя-Отчество (через дефис) =ЛЕВСИМВ(A2;НАЙТИ("-";A2)-1) Для Иванов-Алексей-ПетровичИванов

5. Способ 4: Продвинутая сортировка с Power Query

Для больших таблиц (10 000+ строк) или сложных форматов ФИО удобнее использовать Power Query — встроенный инструмент Excel для преобразования данных. Он позволяет разделить ФИО на части без формул и автоматизировать процесс.

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

  1. Выделите исходную таблицу и нажмите Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся окне Power Query выделите столбец с ФИО.
  3. Перейдите на вкладку Преобразовать → Разделить столбец → По разделителю.
  4. Выберите разделитель Пробел и укажите, на сколько столбцов разбивать (обычно 3: фамилия, имя, отчество).
  5. Удалите ненужные столбцы (например, с именем и отчеством), оставьте только фамилию.
  6. Нажмите Главная → Закрыть и загрузить — данные вернутся в Excel в новом листе.
  7. Отсортируйте полученную таблицу по столбцу с фамилиями.

Преимущества Power Query:

  • 🔄 Обработка миллионов строк без замедления.
  • 📊 Возможность сохранять шаги преобразования для повторного использования.
  • 🛠️ Автоматическое обновление данных при изменении исходной таблицы.

6. Способ 5: Макрос для автоматической сортировки по фамилиям

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

  • Находит столбец с ФИО (по заголовку "ФИО" или "Full Name").
  • Добавляет вспомогательный столбец с фамилиями.
  • Сортирует таблицу по фамилиям.
  • Удаляет вспомогательный столбец.

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль (Insert → Module).
  3. Скопируйте код ниже:
Sub SortBySurname()

Dim ws As Worksheet

Dim rng As Range, lastRow As Long, i As Long

Dim surnameCol As Long, dataCol As Long

' Настройте имя листа и заголовок столбца с ФИО

Set ws = ThisWorkbook.Sheets("Лист1") ' Измените на имя вашего листа

dataCol = ws.Cells(1, 1).EntireRow.Find(What:="ФИО", LookIn:=xlValues, lookat:=xlWhole).Column

' Находим последнюю строку

lastRow = ws.Cells(ws.Rows.Count, dataCol).End(xlUp).Row

' Добавляем вспомогательный столбец для фамилий

surnameCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column + 1

ws.Cells(1, surnameCol).Value = "Фамилия"

' Извлекаем фамилии

For i = 2 To lastRow

ws.Cells(i, surnameCol).Value = Split(ws.Cells(i, dataCol).Value, " ")(0)

Next i

' Сортируем по фамилиям

ws.Sort.SortFields.Clear

ws.Sort.SortFields.Add Key:=ws.Cells(1, surnameCol), SortOn:=xlSortOnValues, Order:=xlAscending

ws.Sort.SetRange ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column))

ws.Sort.Apply

' Удаляем вспомогательный столбец

ws.Columns(surnameCol).Delete

MsgBox "Сортировка по фамилиям завершена!", vbInformation

End Sub

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

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

1. Измените строку Set ws = ThisWorkbook.Sheets("Лист1") — укажите имя вашего листа.

2. Если заголовок столбца с ФИО не "ФИО", замените What:="ФИО" на ваш заголовок (например, What:="Full Name").

3. Для сортировки по убыванию замените Order:=xlAscending на Order:=xlDescending.

7. Частые ошибки и их решения

Даже при правильном выполнении инструкций сортировка может пойти не так. Рассмотрим типичные проблемы и способы их устранения:

Ошибка Причина Решение
Сортировка игнорирует фамилии Вспомогательный столбец не обновлён или содержит ошибки в формулах Проверьте формулы на наличие #ЗНАЧ! или #Н/Д. Обновите значения (F9)
Данные сортируются хаотично В таблице есть объединённые ячейки или скрытые столбцы Разъедините ячейки (Главная → Объединить и поместить в центре) и отобразите все столбцы
Фамилии с цифрами или символами идут отдельно Excel воспринимает их как числа или специальные символы Приведите все фамилии к текстовому формату (Формат ячеек → Текстовый)
Не работает макрос Файл сохранён в формате .xlsx (без поддержки макросов) Сохраните файл как .xlsm и разрешите выполнение макросов

Если после сортировки данные "расползлись" (например, имя и фамилия поменялись местами), вероятно, в исходных данных были лишние пробелы или нестандартные разделители. Используйте функцию =СЖПРОБЕЛЫ() для очистки:

=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(A2;СИМВОЛ(160);" "))

Эта формула заменяет неразрывные пробелы (СИМВОЛ(160)) на обычные и удаляет лишние.

1. Единообразие форматов ФИО в таблице.

2. Отсутствие объединённых ячеек и скрытых столбцов.

3. Правильный формат данных (текстовый, а не числовой).-->

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

Можно ли отсортировать по фамилии, если она записана после имени (например, "John Smith")?

Да, используйте формулу для извлечения второго слова:

=ПСТР(A2;НАЙТИ(" ";A2)+1;ДЛСТР(A2))

Для сортировки по убыванию добавьте вспомогательный столбец с этой формулой и отсортируйте по нему.

Как сортировать по фамилии, если в ячейке только инициалы (например, "Иванов А.П.")?

В этом случае стандартная сортировка сработает корректно, так как фамилия стоит на первом месте. Если нужно отсортировать по инициалам (например, по алфавиту имён), используйте:

=ПСТР(A2;НАЙТИ(" ";A2)+1;2)

Эта формула извлечёт инициалы (А.П.), и вы сможете отсортировать таблицу по ним.

Почему после сортировки данные в строках "съехали" (например, фамилия и имя поменялись местами)?

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

  • Объединённых ячеек в таблице.
  • Неправильно выделенного диапазона перед сортировкой (например, выделили только один столбец вместо всей таблицы).
  • Наличия скрытых столбцов, которые Excel проигнорировал.

Решение: отмените сортировку (Ctrl+Z), проверьте таблицу на объединённые ячейки и повторите сортировку, выделив всю таблицу целиком (включая заголовки).

Как отсортировать по фамилии в Google Таблицах?

Алгоритм аналогичен Excel:

  1. Добавьте вспомогательный столбец с формулой =SPLIT(A2; " ") (разделит ФИО по пробелам).
  2. Используйте =INDEX(SPLIT(A2; " "); 1; 1) для извлечения фамилии.
  3. Отсортируйте таблицу по вспомогательному столбцу (Данные → Сортировка диапазона).

В Google Таблицах также есть встроенный инструмент Разделить текст на столбцы (Данные → Разделить текст на столбцы), который упрощает разделение ФИО.

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

Да, для этого подойдёт:

  • Таблица Excel: Преобразуйте диапазон в таблицу (Ctrl+T), затем добавьте вспомогательный столбец с формулой для извлечения фамилии. При добавлении новых строк формула автоматически скопируется.
  • Power Query: Настройте запрос один раз, и при обновлении данных (Данные → Обновить все) сортировка будет применена заново.
  • Макрос: Назначьте макрос на кнопку или запускайте его вручную после добавления данных.