Почему определение пола по отчеству в Excel — не тривиальная задача
На первый взгляд, задача кажется простой: если отчество заканчивается на «вич» — мужчина, на «вна» — женщина. Но любой, кто хоть раз работал с реальными данными, знает: в жизни всё сложнее. Встречаются отчества с мягким знаком (Ильич, Никитична), двойные отчества (Сергеевич-Александрович), иностранные варианты или ошибки ввода (Ивановна у мужчины). А ещё есть 187 официально зарегистрированных в России отчеств, которые не подчиняются стандартным правилам — например, Саввична (женское отчество от имени Савва) или Лукьянович (мужское с мягким знаком).
В этой статье мы разберём не только базовые формулы для определения пола, но и учтём все эти нюансы. Вы узнаете, как:
- 🔹 Использовать ПРАВСИМВ и ПОИСК для простых случаев
- 🔹 Обрабатывать исключения с помощью ВПР или XLOOKUP
- 🔹 Автоматизировать процесс с Power Query для больших баз
- 🔹 Проверять данные на ошибки перед анализом
Все примеры адаптированы для Excel 2016–2023 и Microsoft 365, но большинство формул будут работать и в Google Таблицах. Готовые шаблоны можно скачать в конце статьи.
Способ 1: Базовая формула с ПРАВСИМВ и ЕСЛИ
Для 80% случаев хватит простой проверки последних букв отчества. Формула выглядит так:
=ЕСЛИ(ИЛИ(ПРАВСИМВ(B2;3)="вич"; ПРАВСИМВ(B2;4)="ич"); "М"; ЕСЛИ(ИЛИ(ПРАВСИМВ(B2;3)="вна"; ПРАВСИМВ(B2;4)="на"); "Ж"; "Ошибка"))
Где B2 — ячейка с отчеством. Логика:
- 🔍 Ищем окончания «вич» или «ич»** (например, Ильич)
- 🔍 Для женского пола — «вна» или «на» (например, Александровна или Никитична)
- ❌ Если не подходит ни под одно правило — выводим «Ошибка»**
⚠️ Внимание: Эта формула не учитывает отчества с мягким знаком в середине (например, Лукьянович) и иностранные варианты. Для них потребуется расширенный подход.
Чтобы формула работала корректно, убедитесь, что:
Удалите пробелы в начале/конце отчеств (функция СЖПРОБЕЛЫ)
Приведите текст к нижнему регистру (НИЖНРЕГ) или верхнему (ВЕРХНРЕГ)
Проверьте отсутствие опечаток (например, "Ивановна" у мужчины)
Удалите двойные отчества или оставьте только последнее слово-->
Способ 2: Учёт исключений с помощью ВПР или XLOOKUP
Для обработки нестандартных отчеств создайте отдельный справочник с исключениями. Например:
| Отчество | Пол |
|---|---|
| Саввична | Ж |
| Лукьянович | М |
| Ильинична | Ж |
| Никитич | М |
| Кузьминична | Ж |
Теперь модифицируем формулу:
=ЕСЛИОШИБКА(ВПР(B2; Исключения!A:B; 2; ЛОЖЬ);
ЕСЛИ(ИЛИ(ПРАВСИМВ(B2;3)="вич"; ПРАВСИМВ(B2;4)="ич"); "М";
ЕСЛИ(ИЛИ(ПРАВСИМВ(B2;3)="вна"; ПРАВСИМВ(B2;4)="на"); "Ж"; "Ошибка")))
Альтернатива для Excel 365:
=ЕСЛИНА(XLOOKUP(B2; Исключения!A:A; Исключения!B:B;;
ЕСЛИ(ИЛИ(ПРАВСИМВ(B2;3)="вич"; ПРАВСИМВ(B2;4)="ич"); "М";
ЕСЛИ(ИЛИ(ПРАВСИМВ(B2;3)="вна"; ПРАВСИМВ(B2;4)="на"); "Ж"; "Ошибка"))))
Где разместить справочник? Лучше на отдельном листе Исключения или в именованном диапазоне. Обновляйте его по мере обнаружения новых нестандартных отчеств.
Способ 3: Регулярные выражения (для Power Query)
Если вы работаете с большими объёмами данных, лучше перенести логику в Power Query. Это позволит:
- 🔄 Обрабатывать миллионы строк без тормозов
- 🔧 Гибко настраивать правила через регулярные выражения
- 📥 Автоматически обновлять данные при изменении источника
Алгоритм:
- Импортируйте данные в Power Query (
Данные → Получить данные → Из таблицы/диапазона) - Добавьте пользовательский столбец с формулой:
if Text.EndsWith([Отчество], "вич") or Text.EndsWith([Отчество], "ич") then "М"else if Text.EndsWith([Отчество], "вна") or Text.EndsWith([Отчество], "на") then "Ж"
else "Ошибка"
- Для исключений используйте
Table.AddColumnсList.Contains
Пример кода для Power Query с учётом исключений:
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
Исключения = {"Саввична", "Лукьянович", "Ильинична"},
ДобавитьПол = Table.AddColumn(Источник, "Пол", each
if List.Contains(Исключения, [Отчество]) then
if [Отчество] = "Лукьянович" then "М" else "Ж"
else if Text.EndsWith([Отчество], "вич") or Text.EndsWith([Отчество], "ич") then "М"
else if Text.EndsAny([Отчество], {"вна", "на"}) then "Ж"
else "Ошибка")
in
ДобавитьПол
Как обработать двойные отчества?
Для отчеств типа "Сергеевич-Александрович" можно:
1. Разбить строку по дефису (Text.Split([Отчество], "-""))
2. Взять последнюю часть (List.Last)
3. Применить стандартные правила к этой части
Пример кода:
let последняяЧасть = List.Last(Text.Split([Отчество], "-")) in
if Text.EndsWith(последняяЧасть, "вич") then "М" else ...
Способ 4: Использование VBA для сложных случаев
Если вам нужно обработать тысячи строк с множеством исключений, лучше написать макрос. Пример кода:
Function ОпределитьПол(Отчество As String) As String
Dim МужскиеОкончания, ЖенскиеОкончания, ИсключенияМ, ИсключенияЖ
МужскиеОкончания = Array("вич", "ич")
ЖенскиеОкончания = Array("вна", "на")
ИсключенияМ = Array("Лукьянович", "Никитич")
ИсключенияЖ = Array("Саввична", "Ильинична")
' Проверяем исключения
If Not IsError(Application.Match(Отчество, ИсключенияМ, 0)) Then
ОпределитьПол = "М"
Exit Function
ElseIf Not IsError(Application.Match(Отчество, ИсключенияЖ, 0)) Then
ОпределитьПол = "Ж"
Exit Function
End If
' Проверяем стандартные окончания
For Each окончание In МужскиеОкончания
If Right(Отчество, Len(окончание)) = окончание Then
ОпределитьПол = "М"
Exit Function
End If
Next
For Each окончание In ЖенскиеОкончания
If Right(Отчество, Len(окончание)) = окончание Then
ОпределитьПол = "Ж"
Exit Function
End If
Next
ОпределитьПол = "Ошибка"
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA - Вставьте код в новый модуль (
Insert → Module) - В ячейке Excel используйте формулу
=ОпределитьПол(B2)
⚠️ Внимание: Макросы работают только в файлах с расширением.xlsm. Если вы сохраните файл как.xlsx, код VBA будет удалён!
Способ 5: Онлайн-сервисы и API для массовой обработки
Если вам нужно определить пол для десятков тысяч записей и нет времени на настройку формул, можно использовать специализированные сервисы:
- 🌐 Genderize.io — API для определения пола по имени (поддерживает русские ФИО)
- 🌐 Agify.io — дополнительно оценивает возраст
- 🌐 Gender-API — платный сервис с высокой точностью
Пример запроса к Genderize.io (можно выполнить через Power Query):
https://api.genderize.io?name=Иванович&country_id=RU
Ответ будет в формате JSON:
{
"name": "Иванович",
"gender": "male",
"probability": 1.0,
"count": 1245
}
Чтобы автоматизировать процесс:
- Используйте
WEBSERVICEиFILTERXMLв Excel 365 - Или настройте импорт через Power Query с параметром
Web.Page
Проверка результатов и обработка ошибок
Даже самая продвинутая формула даст сбои на реальных данных. Чтобы минимизировать ошибки:
- Проверьте распределение полов:
=СЧЁТЕСЛИ(C:C; "М") / СЧЁТЗ(C:C)Если мужчин >60% или женщин >60%, возможно, формула работает некорректно.
- Выделите сомнительные случаи:
=ЕСЛИ(И(ДЛСТР(B2)<5; C2="Ошибка"); "Проверьте"; "")Это найдёт слишком короткие отчества, помеченные как ошибка.
- Сравните с другими источниками:
Если у вас есть столбец с именами, используйте Genderize.io для кросс-проверки.
Типичные ошибки и их причины:
| Ошибка | Возможная причина | Решение |
|---|---|---|
| Отчество "Ивановна" → "М" | Опечатка в данных (должно быть "Иванович") | Добавьте проверку на ПОИСК("овна"; B2) |
| "Лукьянович" → "Ошибка" | Отсутствует в списке исключений | Добавьте в справочник исключений |
| Пустая ячейка → "#ЗНАЧ!" | Формула не обрабатывает пустые значения | Оберните в ЕСЛИ(Б2=""; ""; ваша_формула) |
| Двойное отчество → "Ошибка" | Формула не разбивает строку по дефису | Используйте ПСТР и НАЙТИ для извлечения последней части |
FAQ: Частые вопросы по определению пола в Excel
Можно ли определить пол только по имени, без отчества?
Да, но точность будет ниже. Например, Александр — почти всегда мужское имя, а Валерий/Валерия — унисекс. Для русских имён можно использовать справочник популярных имён по полу (например, от Росстата). Формула:
=ВПР(A2; СписокИмён!A:B; 2; ЛОЖЬ)
Где СписокИмён — таблица с двумя столбцами: имя и пол.
Как обработать иностранные отчества (например, "Оглы", "Кызы")?
Для тюркских отчеств (Оглы — мужское, Кызы — женское) добавьте в формулу дополнительные проверки:
=ЕСЛИ(ПРАВСИМВ(B2;4)="оглы"; "М";
ЕСЛИ(ПРАВСИМВ(B2;4)="кызы"; "Ж"; ...))
Полный список тюркских отчеств можно найти в Википедии.
Почему формула выдаёт "Ошибка" для отчества "Никитич"?
Потому что Никитич — мужское отчество, но заканчивается на «ич»** (как и Ильич). Ваша формула должна учитывать это как исключение. Добавьте в справочник:
| Отчество | Пол |
|---|---|
| Никитич | М |
Как автоматически обновлять пол при изменении отчества?
Используйте динамические массивы (Excel 365) или таблицы Excel:
- Преобразуйте диапазон в таблицу (
Ctrl + T) - В столбце "Пол" введите формулу один раз — она автоматически скопируется на все строки
- При изменении отчества пол пересчитается автоматически
Для VBA можно использовать событие Worksheet_Change:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Application.EnableEvents = False
Range("C:C").Calculate
Application.EnableEvents = True
End If
End Sub
Где скачать готовый шаблон Excel с формулами?
Вы можете скачать наш шаблон по ссылке:
📥 Скачать шаблон определения пола по отчеству
В шаблоне:
- 📊 3 листа с разными методами (формулы, Power Query, VBA)
- 📋 Справочник исключений на 200+ отчеств
- 🛠 Инструкция по настройке под ваши данные