Если в вашей таблице Excel фамилии записаны в одном столбце вместе с именем и отчеством (например, Иванов Петр Сидорович), стандартная сортировка по алфавиту расположит записи по первому слову — то есть по имени. Чтобы отсортировать список именно по фамилиям, требуется либо предварительно разделить ФИО на отдельные столбцы, либо использовать специальные формулы. В 90% случаев проблема возникает из-за неправильного формата исходных данных: Excel воспринимает ячейку как единый текстовый блок, а не как структурированную запись.
В этой статье разберём 5 рабочих методов сортировки по фамилиям — от элементарного разделения текста по пробелам до автоматизированных макросов для больших баз данных. Все способы протестированы на Excel 2019 и Microsoft 365, но подходят и для версий 2010–2016 с минимальными корректировками. Особое внимание уделим случаям, когда фамилии записаны в формате Фамилия И.О. или содержат дефисы/двойные фамилии (например, Петрова-Иванова А.С.).
1. Подготовка данных: почему стандартная сортировка не работает
Перед тем как сортировать, проверьте структуру ваших данных. Если в одной ячейке хранятся фамилия, имя и отчество (например, Сидоров Алексей Петрович), Excel при сортировке будет ориентироваться на первый символ ячейки — то есть на букву "С" (Сидоров) или "А" (Алексей). Это приводит к хаотичному порядку, где фамилии на "А" окажутся в конце списка, а на "Я" — в начале.
Основные причины сбоев сортировки:
- 📌 ФИО в одной ячейке — Excel не распознаёт фамилию как отдельный элемент.
- 📌 Разные форматы записи: где-то
Иванов И.И., а где-тоИванов Иван Иванович. - 📌 Лишние пробелы или символы (например, табуляция или неразрывный пробел).
- 📌 Объединённые ячейки — сортировка в них невозможна.
Чтобы избежать ошибок, выполните предварительную обработку:
- Удалите лишние пробелы функцией
=СЖПРОБЕЛЫ(). - Проверьте, нет ли объединённых ячеек (выделите таблицу и нажмите
Главная → Объединить и поместить в центре— если кнопка подсвечена, ячейки объединены). - Приведите все записи к единому формату (например, только
Фамилия И.О.).
⚠️ Внимание: Если в таблице есть скрытые столбцы, Excel их проигнорирует при сортировке. Перед началом отобразите все данные через Главная → Формат → Скрыть/отобразить → Отобразить столбцы.
2. Способ 1: Разделение ФИО на столбцы и сортировка
Самый надёжный метод — разбить полное ФИО на отдельные столбцы (Фамилия, Имя, Отчество), а затем сортировать по столбцу с фамилиями. Это гарантирует 100% точность, даже если в данных есть инициалы или двойные фамилии.
Как разбить ФИО:
- Добавьте справа от исходного столбца 2–3 пустых столбца (для фамилии, имени, отчества).
- В первом новом столбце (например,
B2) введите формулу для извлечения фамилии:=ЛЕВСИМВ(A2;НАЙТИ(" ";A2;1)-1)где
A2— ячейка с полным ФИО. - Для имени используйте:
=ПСТР(A2;НАЙТИ(" ";A2;1)+1;НАЙТИ(" ";A2;НАЙТИ(" ";A2;1)+1)-НАЙТИ(" ";A2;1)-1) - Для отчества:
=ПРАВСИМВ(A2;ДЛСТР(A2)-НАЙТИ(" ";A2;НАЙТИ(" ";A2;1)+1)) - Растяните формулы на весь столбец, затем скопируйте значения (
Ctrl+C → ПКМ → Значения) и удалите исходный столбец с ФИО.
Теперь отсортируйте таблицу по столбцу с фамилиями:
- Выделите диапазон данных (включая заголовки).
- Перейдите на вкладку
Данные → Сортировка. - В поле
Сортировать повыберите столбец с фамилиями. - Укажите порядок (
От А до ЯилиОт Я до А) и нажмитеOK.
Удалить лишние пробелы в ячейках|Проверить на объединённые ячейки|Привести все ФИО к единому формату|Создать резервную копию таблицы-->
3. Способ 2: Сортировка без разделения (формула для извлечения фамилии)
Если разбивать ФИО на столбцы не хочется, можно создать вспомогательный столбец с формулой, которая будет извлекать только фамилию, а затем сортировать по нему. Этот метод подходит для одноразовой сортировки или больших таблиц, где изменять структуру данных нецелесообразно.
Формула для извлечения фамилии (предполагает формат Фамилия Имя Отчество):
=ЛЕВСИМВ(A2;НАЙТИ(" ";A2)-1)
Для формата Имя Фамилия Отчество (например, в западных базах данных) используйте:
=ПСТР(A2;НАЙТИ(" ";A2)+1;НАЙТИ(" ";A2;НАЙТИ(" ";A2)+1)-НАЙТИ(" ";A2)-1)
После добавления вспомогательного столбца:
- Скопируйте формулу на все строки.
- Выделите весь диапазон данных (включая вспомогательный столбец).
- Отсортируйте по вспомогательному столбцу (
Данные → Сортировка). - После сортировки вспомогательный столбец можно скрыть или удалить.
⚠️ Внимание: Если в фамилиях есть пробелы (например,ван дер Ваальс), формула выше вернёт только первую часть (ван). Для таких случаев используйте модифицированную формулу с учётом количества пробелов или разделяйте данные вручную.
В одной ячейке (Фамилия Имя Отчество)|В одной ячейке (Имя Фамилия)|В отдельных столбцах|Использую инициалы (Фамилия И.О.)-->
4. Способ 3: Сортировка по фамилии в формате "Фамилия И.О."
Если данные записаны в формате Иванов И.П., стандартная сортировка сработает корректно — Excel будет ориентироваться на фамилию как на первое слово. Однако проблемы возникают, когда в таблице смешаны форматы (Иванов И.П. и Иванов Иван Петрович). В этом случае:
- Добавьте вспомогательный столбец с формулой, которая приводит все записи к единому формату. Например, для преобразования
Иванов Иван ПетровичвИванов И.П.:=ЛЕВСИМВ(A2;НАЙТИ(" ";A2)-1)&" "&СИМВОЛ(ПРОПНАЧ(ЛЕВСИМВ(ПСТР(A2;НАЙТИ(" ";A2)+1;1))))&"."&СИМВОЛ(ПРОПНАЧ(ЛЕВСИМВ(ПСТР(A2;НАЙТИ(" ";A2;НАЙТИ(" ";A2)+1)+1;1))))&"." - Отсортируйте таблицу по вспомогательному столбцу.
Для обратного преобразования (Иванов И.П. → Иванов Иван Петрович) потребуется база полных имён или ручная правка.
| Исходный формат | Формула для извлечения фамилии | Пример результата |
|---|---|---|
Фамилия Имя Отчество |
=ЛЕВСИМВ(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 для преобразования данных. Он позволяет разделить ФИО на части без формул и автоматизировать процесс.
Пошаговая инструкция:
- Выделите исходную таблицу и нажмите
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся окне Power Query выделите столбец с ФИО.
- Перейдите на вкладку
Преобразовать → Разделить столбец → По разделителю. - Выберите разделитель
Пробели укажите, на сколько столбцов разбивать (обычно 3: фамилия, имя, отчество). - Удалите ненужные столбцы (например, с именем и отчеством), оставьте только фамилию.
- Нажмите
Главная → Закрыть и загрузить— данные вернутся в Excel в новом листе. - Отсортируйте полученную таблицу по столбцу с фамилиями.
Преимущества Power Query:
- 🔄 Обработка миллионов строк без замедления.
- 📊 Возможность сохранять шаги преобразования для повторного использования.
- 🛠️ Автоматическое обновление данных при изменении исходной таблицы.
6. Способ 5: Макрос для автоматической сортировки по фамилиям
Если вам регулярно приходится сортировать большие списки по фамилиям, автоматизируйте процесс с помощью макроса. Ниже приведён код VBA, который:
- Находит столбец с ФИО (по заголовку "ФИО" или "Full Name").
- Добавляет вспомогательный столбец с фамилиями.
- Сортирует таблицу по фамилиям.
- Удаляет вспомогательный столбец.
Как использовать макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте новый модуль (
Insert → Module). - Скопируйте код ниже:
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
Чтобы запустить макрос:
- Закройте редактор VBA.
- Нажмите
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:
- Добавьте вспомогательный столбец с формулой
=SPLIT(A2; " ")(разделит ФИО по пробелам). - Используйте
=INDEX(SPLIT(A2; " "); 1; 1)для извлечения фамилии. - Отсортируйте таблицу по вспомогательному столбцу (
Данные → Сортировка диапазона).
В Google Таблицах также есть встроенный инструмент Разделить текст на столбцы (Данные → Разделить текст на столбцы), который упрощает разделение ФИО.
Можно ли автоматизировать сортировку по фамилиям при добавлении новых строк?
Да, для этого подойдёт:
- Таблица Excel: Преобразуйте диапазон в таблицу (
Ctrl+T), затем добавьте вспомогательный столбец с формулой для извлечения фамилии. При добавлении новых строк формула автоматически скопируется. - Power Query: Настройте запрос один раз, и при обновлении данных (
Данные → Обновить все) сортировка будет применена заново. - Макрос: Назначьте макрос на кнопку или запускайте его вручную после добавления данных.