Как отфильтровать данные по дате рождения в Excel: полное руководство с примерами

Работа с датами рождения в Microsoft Excel — одна из самых востребованных задач при анализе кадровых данных, составлении отчётов по возрастным группам или подготовке поздравлений для сотрудников. Однако многие пользователи сталкиваются с трудностями: то формат ячеек сбивается, то фильтр некорректно обрабатывает диапазоны, то формулы возвращают ошибки. Эта статья поможет разобраться, как правильно отфильтровать данные по дате рождения — от базовых методов до продвинутых техник с использованием Power Query и VBA.

Мы рассмотрим не только стандартные инструменты вроде автофильтра, но и малоизвестные приёмы: фильтрацию по возрасту (а не по дате), обработку некорректных форматов дат, а также автоматизацию процесса для регулярных отчётов. Особое внимание уделим типичным ошибкам, из-за которых фильтр "не видит" даты или сортирует их как текст.

Если вы когда-нибудь пытались отфильтровать сотрудников старше 30 лет, но получали пустой результат, или ваш Excel упорно воспринимал даты как текст — эта инструкция для вас. Все методы протестированы на версиях Excel 2016–2023 и Microsoft 365, с учётом особенностей русскоязычной локализации.

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

Прежде чем применять фильтры, убедитесь, что ваши даты рождения корректно распознаны программой. Частая ошибка — когда Excel воспринимает даты как текст (например, после импорта из или CSV). Признаки проблемы:

  • 📅 Даты выровнены по левому краю ячейки (текстовый формат)
  • 🔢 При сортировке порядок нарушен (например, "01.01.1990" идёт после "31.12.1989")
  • ⚠️ В строке формул отображается апостроф перед датой: '15.05.1985

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

  1. Выделите столбец с датами → правая кнопка мыши → Формат ячеек.
  2. Выберите категорию Дата и укажите формат (например, 14.03.2001).
  3. Если даты не изменились, используйте функцию =ДАТАЗНАЧ(A2) в соседнем столбце, затем скопируйте значения обратно.

Ещё одна ловушка — американский формат дат (месяц/день/год). Если ваш Excel настроен на английскую локаль, дата 05.06.1990 может быть интерпретирована как 5 июня, а не 6 мая. Чтобы избежать путаницы, используйте ДАТА() с явным указанием дня, месяца и года:

=ДАТА(1990; 6; 5)

2. Базовый метод: автофильтр по дате рождения

Самый простой способ отфильтровать данные — использовать встроенный автофильтр. Он подходит для одноразовых задач, когда нужно быстро найти людей, родившихся в определённом диапазоне дат.

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

  1. Выделите заголовок столбца с датами рождения (например, B1).
  2. Перейдите на вкладку Данные → нажмите Фильтр (или Ctrl+Shift+L).
  3. Кликните по стрелке фильтра в заголовке столбца → Фильтры по дате.
  4. Выберите нужный критерий: До..., После..., Между... или Пользовательский фильтр.

Пример: чтобы найти сотрудников, родившихся до 1 января 1990 года, выберите До... и введите 01.01.1990. Для диапазона (например, 1985–1995 гг.) используйте Между....

Что делать, если в фильтре нет опции "Фильтры по дате"?

Это означает, что Excel воспринимает данные как текст. Преобразуйте формат ячеек в "Дата" (см. раздел 1) или используйте формулу =ДАТАЗНАЧ() для преобразования.

Ограничения автофильтра:

  • ❌ Нельзя фильтровать по возрасту (только по датам)
  • ❌ Нет возможности сохранять часто используемые фильтры
  • ❌ Не подходит для больших таблиц (более 10 000 строк)
📊 Какой метод фильтрации вы используете чаще?
Автофильтр
Расширенный фильтр
Формулы (ФИЛЬТР, ЕСЛИ)
Power Query
VBA

3. Расширенный фильтр: гибкие условия для дат

Если автофильтра недостаточно, воспользуйтесь расширенным фильтром. Он позволяет:

  • 📌 Фильтровать данные по нескольким критериям одновременно
  • 📌 Сохранять результаты в другом месте листа
  • 📌 Использовать формулы в качестве условий

Пример 1: Фильтрация по диапазону дат

Допустим, у вас таблица с сотрудниками в диапазоне A1:C100 (столбцы: ФИО, Дата рождения, Должность). Чтобы отфильтровать тех, кто родился с 01.01.1980 по 31.12.1989:

  1. Скопируйте заголовок столбца "Дата рождения" в пустую область (например, E1).
  2. В E2 введите >=01.01.1980, в E3<=31.12.1989.
  3. Перейдите в Данные → Сортировка и фильтр → Расширенный.
  4. Укажите:
    • Исходный диапазон: $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:

  1. Добавьте столбец "Возраст" с формулой: =ЦЕЛОЕ((СЕГОДНЯ()-B2)/365,25) (приблизительный расчёт)
  2. Примените автофильтр к этому столбцу с условием >=30.
  3. Типичная ошибка: многие пользователи делят разницу дат на 365, но это приводит к погрешности в високосные годы. Правильный расчёт учитывает месяцы и дни:

    =ЕСЛИ(ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(B2);ДЕНЬ(B2))>СЕГОДНЯ();
    

    ГОД(СЕГОДНЯ())-ГОД(B2)-1;

    ГОД(СЕГОДНЯ())-ГОД(B2))

    5. Power Query: автоматизация фильтрации по датам

    Для регулярной обработки данных (например, ежемесячных отчётов) идеально подходит Power Query. Этот инструмент позволяет:

    • 🔄 Импортировать данные из разных источников
    • 📅 Преобразовывать форматы дат автоматически
    • 📊 Фильтровать и группировать данные без формул

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

  1. Выделите исходную таблицу → Данные → Из таблицы/диапазона (в группе Получить данные).
  2. В открывшемся окне Power Query выберите столбец с датой рождения → кликните по стрелке фильтра.
  3. Выберите Фильтры по датеМежду... и укажите диапазон.
  4. Для фильтрации по возрасту добавьте вычисляемый столбец:
    • Перейдите на вкладку Добавить столбецПользовательский столбец.
    • Введите формулу:
      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 лет И пол "Ж")?

    Да, используйте расширенный фильтр с несколькими строками условий или функцию ФИЛЬТР в Excel 365:

    =ФИЛЬТР(
    

    A2:C100;

    (Возраст>=25) (Возраст<=30) (Пол="Ж");

    "Нет данных"

    )

    или в Power Query добавьте несколько этапов фильтрации.