Работа с датами рождения в Microsoft Excel — одна из самых востребованных задач при анализе кадровых данных, составлении отчётов по возрастным группам или подготовке поздравлений для сотрудников. Однако многие пользователи сталкиваются с трудностями: то формат ячеек сбивается, то фильтр некорректно обрабатывает диапазоны, то формулы возвращают ошибки. Эта статья поможет разобраться, как правильно отфильтровать данные по дате рождения — от базовых методов до продвинутых техник с использованием Power Query и VBA.
Мы рассмотрим не только стандартные инструменты вроде автофильтра, но и малоизвестные приёмы: фильтрацию по возрасту (а не по дате), обработку некорректных форматов дат, а также автоматизацию процесса для регулярных отчётов. Особое внимание уделим типичным ошибкам, из-за которых фильтр "не видит" даты или сортирует их как текст.
Если вы когда-нибудь пытались отфильтровать сотрудников старше 30 лет, но получали пустой результат, или ваш Excel упорно воспринимал даты как текст — эта инструкция для вас. Все методы протестированы на версиях Excel 2016–2023 и Microsoft 365, с учётом особенностей русскоязычной локализации.
1. Подготовка данных: почему Excel не видит даты рождения?
Прежде чем применять фильтры, убедитесь, что ваши даты рождения корректно распознаны программой. Частая ошибка — когда Excel воспринимает даты как текст (например, после импорта из 1С или CSV). Признаки проблемы:
- 📅 Даты выровнены по левому краю ячейки (текстовый формат)
- 🔢 При сортировке порядок нарушен (например, "01.01.1990" идёт после "31.12.1989")
- ⚠️ В строке формул отображается апостроф перед датой:
'15.05.1985
Как исправить формат:
- Выделите столбец с датами → правая кнопка мыши →
Формат ячеек. - Выберите категорию Дата и укажите формат (например,
14.03.2001). - Если даты не изменились, используйте функцию
=ДАТАЗНАЧ(A2)в соседнем столбце, затем скопируйте значения обратно.
Ещё одна ловушка — американский формат дат (месяц/день/год). Если ваш Excel настроен на английскую локаль, дата 05.06.1990 может быть интерпретирована как 5 июня, а не 6 мая. Чтобы избежать путаницы, используйте ДАТА() с явным указанием дня, месяца и года:
=ДАТА(1990; 6; 5)
2. Базовый метод: автофильтр по дате рождения
Самый простой способ отфильтровать данные — использовать встроенный автофильтр. Он подходит для одноразовых задач, когда нужно быстро найти людей, родившихся в определённом диапазоне дат.
Пошаговая инструкция:
- Выделите заголовок столбца с датами рождения (например,
B1). - Перейдите на вкладку
Данные→ нажмитеФильтр(илиCtrl+Shift+L). - Кликните по стрелке фильтра в заголовке столбца →
Фильтры по дате. - Выберите нужный критерий:
До...,После...,Между...илиПользовательский фильтр.
Пример: чтобы найти сотрудников, родившихся до 1 января 1990 года, выберите Это означает, что Excel воспринимает данные как текст. Преобразуйте формат ячеек в "Дата" (см. раздел 1) или используйте формулу До... и введите 01.01.1990. Для диапазона (например, 1985–1995 гг.) используйте Между....
Что делать, если в фильтре нет опции "Фильтры по дате"?
=ДАТАЗНАЧ() для преобразования.
Ограничения автофильтра:
- ❌ Нельзя фильтровать по возрасту (только по датам)
- ❌ Нет возможности сохранять часто используемые фильтры
- ❌ Не подходит для больших таблиц (более 10 000 строк)
3. Расширенный фильтр: гибкие условия для дат
Если автофильтра недостаточно, воспользуйтесь расширенным фильтром. Он позволяет:
- 📌 Фильтровать данные по нескольким критериям одновременно
- 📌 Сохранять результаты в другом месте листа
- 📌 Использовать формулы в качестве условий
Пример 1: Фильтрация по диапазону дат
Допустим, у вас таблица с сотрудниками в диапазоне A1:C100 (столбцы: ФИО, Дата рождения, Должность). Чтобы отфильтровать тех, кто родился с 01.01.1980 по 31.12.1989:
- Скопируйте заголовок столбца "Дата рождения" в пустую область (например,
E1). - В
E2введите>=01.01.1980, вE3—<=31.12.1989. - Перейдите в
Данные → Сортировка и фильтр → Расширенный. - Укажите:
- Исходный диапазон:
$A$1:$C$100 - Диапазон условий:
$E$1:$E$3 - Поместить результат в диапазон:
$F$1(или другой адрес)
- Исходный диапазон:
Пример 2: Фильтрация по возрасту (динамический расчёт)
Чтобы отфильтровать сотрудников старше 30 лет, создайте вспомогательный столбец с формулой:
=ГОД(СЕГОДНЯ()) - ГОД(B2) - ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(B2); ДЕНЬ(B2)) > СЕГОДНЯ(); 1; 0)
Затем примените расширенный фильтр к этому столбцу с условием >=30.
Заголовки критериев должны совпадать с заголовками исходной таблицы|
Условия вводятся в отдельных строках под заголовком|
Для формул используйте знак "=" перед условием (например, =И(B2>=ДАТА(1980;1;1); B2<=ДАТА(1989;12;31)))|
Проверьте, что диапазоны не пересекаются с исходными данными-->
4. Фильтрация по возрасту: формулы вместо дат
Часто требуется не фильтровать по датам, а выделять людей определённого возраста. Например, найти сотрудников моложе 25 лет или пенсионеров (женщин старше 55, мужчин старше 60). Для этого используйте формулы массива или новые функции Excel 365.
Способ 1: Функция ФИЛЬТР (Excel 365)
Если у вас Microsoft 365, воспользуйтесь динамической функцией ФИЛЬТР:
=ФИЛЬТР(
A2:C100; -- исходный диапазон
(ГОД(СЕГОДНЯ()) - ГОД(B2:B100) - ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(B2:B100); ДЕНЬ(B2:B100)) > СЕГОДНЯ(); 1; 0)) >= 30; -- условие (возраст >= 30)
"Нет данных"
)
Эта формула вернёт всех сотрудников старше 30 лет. Для фильтрации по полу добавьте ещё одно условие:
=ФИЛЬТР(
A2:C100;
((ГОД(СЕГОДНЯ()) - ГОД(B2:B100) - ЕСЛИ(...) >= 55) * (C2:C100 = "Ж")) + -- женщины старше 55
((ГОД(СЕГОДНЯ()) - ГОД(B2:B100) - ЕСЛИ(...) >= 60) * (C2:C100 = "М")); -- мужчины старше 60
"Нет пенсионеров"
)
Способ 2: Вспомогательный столбец + автофильтр
Для старых версий Excel:
- Добавьте столбец "Возраст" с формулой:
=ЦЕЛОЕ((СЕГОДНЯ()-B2)/365,25)(приблизительный расчёт) - Примените автофильтр к этому столбцу с условием
>=30. - 🔄 Импортировать данные из разных источников
- 📅 Преобразовывать форматы дат автоматически
- 📊 Фильтровать и группировать данные без формул
Типичная ошибка: многие пользователи делят разницу дат на 365, но это приводит к погрешности в високосные годы. Правильный расчёт учитывает месяцы и дни:
=ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(B2);ДЕНЬ(B2))>СЕГОДНЯ();
ГОД(СЕГОДНЯ())-ГОД(B2)-1;
ГОД(СЕГОДНЯ())-ГОД(B2))
5. Power Query: автоматизация фильтрации по датам
Для регулярной обработки данных (например, ежемесячных отчётов) идеально подходит Power Query. Этот инструмент позволяет:
Пошаговая инструкция:
- Выделите исходную таблицу →
Данные → Из таблицы/диапазона(в группеПолучить данные). - В открывшемся окне Power Query выберите столбец с датой рождения → кликните по стрелке фильтра.
- Выберите
Фильтры по дате→Между...и укажите диапазон. - Для фильтрации по возрасту добавьте вычисляемый столбец:
- Перейдите на вкладку
Добавить столбец→Пользовательский столбец. - Введите формулу:
Date.From(DateTime.LocalNow()) - [Дата рождения]и назовите столбец "Возраст в днях".
- Преобразуйте дни в годы, добавив ещё один столбец:
= Number.RoundDown([Возраст в днях]/365,25)
- Перейдите на вкладку
Закрыть и загрузить.Power Query сохраняет все шаги преобразования, поэтому при обновлении исходных данных достаточно нажать Обновить все на вкладке Данные.
Преимущества Power Query:
| Критерий | Автофильтр | Power Query |
|---|---|---|
| Автоматизация | ❌ Ручное применение | ✅ Сохраняет шаги для повторного использования |
| Обработка больших данных | ❌ Медленно на 100 000+ строк | ✅ Оптимизирован для больших объёмов |
| Преобразование форматов | ❌ Требует предварительной подготовки | ✅ Автоматически исправляет форматы дат |
| Интеграция с внешними источниками | ❌ Только данные на листе | ✅ Работает с SQL, CSV, JSON, веб-страницами |
6. VBA-скрипты для сложной фильтрации
Если вам нужно фильтровать даты рождения по сложным условиям (например, найти людей, родившихся в високосный год или в определённый день недели), на помощь придёт VBA. Рассмотрим два полезных макроса.
Макрос 1: Фильтрация по дню недели
Допустим, вы хотите найти всех, кто родился в понедельник. Вставьте этот код в редактор VBA (Alt+F11):
Sub FilterByWeekday()
Dim ws As Worksheet
Dim rng As Range, cell As Range
Dim lastRow As Long
Dim birthDay As Date
Dim targetDay As VbDayOfWeek
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Set rng = ws.Range("B2:B" & lastRow)
targetDay = vbMonday ' Понедельник
' Снять автофильтр, если он применён
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' Применить фильтр
ws.Range("A1:C" & lastRow).AutoFilter Field:=2, Criteria1:="=", _
Operator:=xlFilterDynamic, Criteria2:=Array(0, targetDay)
End Sub
Макрос 2: Фильтрация по возрастному диапазону с учётом пола
Этот скрипт найдёт женщин старше 55 лет и мужчин старше 60:
Sub FilterByAgeAndGender()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Добавить столбец с возрастом, если его нет
If ws.Cells(1, 4).Value <> "Возраст" Then
ws.Cells(1, 4).Value = "Возраст"
ws.Range("D2:D" & lastRow).Formula = "=DATEDIF(B2,TODAY(),""y"")"
End If
' Применить фильтр
ws.Range("A1:D" & lastRow).AutoFilter Field:=4, Criteria1:=">=55", _
Operator:=xlOr, Criteria2:=">=60"
ws.Range("A1:D" & lastRow).AutoFilter Field:=3, Criteria1:="=Ж", _
Operator:=xlOr, Criteria2:="=М"
End Sub
Как запустить макрос?
Нажмите Alt+F8, выберите имя макроса (например, FilterByWeekday) и кликните Выполнить. Для быстрого доступа назначьте макросу сочетание клавиш в меню Вид → Макросы → Параметры.
Предупреждения при работе с VBA:
⚠️ Внимание: Перед запуском макросов сохраните файл в формате .xlsm (с поддержкой макросов). В противном случае Excel заблокирует выполнение кода.
⚠️ Внимание: Макросы могут конфликтовать с защищёнными листами. Если фильтр не применяется, проверьте, не заблокированы ли ячейки в Рецензирование → Защитить лист.
7. Типичные ошибки и как их избежать
Даже опытные пользователи сталкиваются с проблемами при фильтрации дат. Вот самые распространённые ошибки и их решения:
Ошибка 1: Фильтр не находит даты
- 🔹 Причина: Даты сохранены как текст.
- 🔹 Решение: Используйте
=ДАТАЗНАЧ()или преобразуйте формат ячеек.
Ошибка 2: Неправильная сортировка дат
- 🔹 Причина: Excel сортирует даты как текст (например, "01.01.1990" после "31.12.1989").
- 🔹 Решение: Убедитесь, что столбец имеет формат "Дата", а не "Общий" или "Текстовый".
Ошибка 3: Формула возраста даёт неверный результат
- 🔹 Причина: Используется упрощённая формула
=(СЕГОДНЯ()-B2)/365, которая не учитывает високосные годы. - 🔹 Решение: Применяйте
ДАТАМЕС()или комбинациюГОД()/МЕСЯЦ()/ДЕНЬ()(см. раздел 4).
Ошибка 4: Расширенный фильтр не работает
- 🔹 Причина 1: Заголовки в диапазоне условий не совпадают с исходной таблицей.
- 🔹 Причина 2: Условия записаны в одной строке (нужно размещать их в отдельных строках под заголовком).
Ошибка 5: Power Query не распознаёт даты
- 🔹 Причина: При импорте столбец был определен как текст.
- 🔹 Решение: На этапе загрузки измените тип данных на "Дата" или используйте
Date.From()в пользовательском столбце.
8. Продвинутые техники: фильтрация по знаку зодиака, декадам и др.
Иногда требуется фильтровать даты рождения по нестандартным критериям, например:
- 🔮 Знак зодиака: Овен, Телец и т. д.
- 📅 Декады месяца: 1–10, 11–20, 21–31 число.
- 🎂 День недели: Понедельник, вторник и т. д.
Фильтрация по знаку зодиака
Добавьте вспомогательный столбец с формулой:
=ЕСЛИ(И(МЕСЯЦ(B2)=3;ДЕНЬ(B2)>=21);"Овен";
ЕСЛИ(И(МЕСЯЦ(B2)=4;ДЕНЬ(B2)<=19);"Овен";
ЕСЛИ(И(МЕСЯЦ(B2)=4;ДЕНЬ(B2)>=20);"Телец";
...
ЕСЛИ(И(МЕСЯЦ(B2)=2;ДЕНЬ(B2)<=18);"Водолей";"Рыбы")))))))
Затем примените автофильтр к этому столбцу.
Фильтрация по декадам месяца
Используйте формулу:
=ЕСЛИ(ДЕНЬ(B2)<=10;"1 декада";
ЕСЛИ(ДЕНЬ(B2)<=20;"2 декада";"3 декада"))
Фильтрация по дню недели
Формула для определения дня недели (где 1 — воскресенье, 2 — понедельник и т. д.):
=ДЕНЬНЕД(B2;2)
Чтобы получить название дня, используйте:
=ВЫБОР(ДЕНЬНЕД(B2);"Вс";"Пн";"Вт";"Ср";"Чт";"Пт";"Сб")
Важно: функция ДЕНЬНЕД() возвращает разные значения в зависимости от локализации Excel. В русскоязычной версии по умолчанию 1 — воскресенье, но в некоторых региональных настройках может быть 1 — понедельник. Проверьте результат для вашей версии!
FAQ: Частые вопросы по фильтрации дат рождения
Как отфильтровать даты рождения по текущему месяцу (например, найти тех, у кого день рождения в мае)?
Используйте расширенный фильтр с условием:
=МЕСЯЦ(B2)=5
или автофильтр по столбцу с формулой:
=ТЕКСТ(B2;"мм")="05"
Можно ли фильтровать даты рождения по возрасту без вспомогательных столбцов?
В Excel 365 — да, с помощью функции ФИЛЬТР (см. раздел 4). В старых версиях потребуется добавить столбец с возрастом или использовать Power Query.
Почему при фильтрации по возрасту некоторые даты попадают в неверную группу?
Скорее всего, вы используете упрощённую формулу =(СЕГОДНЯ()-B2)/365. Она не учитывает, что человек ещё не отметил день рождения в этом году. Правильный расчёт:
=ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(B2);ДЕНЬ(B2))>СЕГОДНЯ();
ГОД(СЕГОДНЯ())-ГОД(B2)-1;
ГОД(СЕГОДНЯ())-ГОД(B2))
Как автоматически обновлять возраст при изменении текущей даты?
Возраст в Excel обновляется автоматически, если в формуле используется СЕГОДНЯ(). Чтобы принудительно пересчитать все формулы, нажмите F9 или перейдите в Формулы → Вычислить.
Можно ли фильтровать даты рождения по нескольким условиям одновременно (например, возраст 25–30 лет И пол "Ж")?
Да, используйте расширенный фильтр с несколькими строками условий или функцию A2:C100; (Возраст>=25) (Возраст<=30) (Пол="Ж"); "Нет данных" )ФИЛЬТР в Excel 365:
=ФИЛЬТР(
или в Power Query добавьте несколько этапов фильтрации.