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

Расчёт возраста по дате рождения в Microsoft Excel или Google Таблицах — задача, с которой сталкиваются HR-специалисты, медики, учителя и даже обычные пользователи при ведении семейного бюджета или планировании мероприятий. Казалось бы, что может быть проще: вычесть одну дату из другой? Но на практике здесь кроются подводные камни: учётывать ли текущий день рождения, как избежать ошибки #ЧИСЛО!, и почему функция РАЗНДАТ ведёт себя непредсказуемо в новых версиях Excel.

Эта статья не просто перечислит формулы — она объяснит логику их работы, покажет реальные примеры с данными и научит обрабатывать типичные ошибки. Вы узнаете, как посчитать возраст в годах, месяцах и днях, как автоматизировать обновление при изменении текущей даты, и почему иногда лучше использовать YEARFRAC вместо привычной DATEDIF. А в конце вас ждёт бонус: готовая таблица-шаблон для копирования!

Почему нельзя просто вычесть даты: математика возраста в Excel

На первый взгляд, расчёт возраста сводится к базовой арифметике: =СЕГОДНЯ()-A2, где A2 — ячейка с датой рождения. Но результат будет в формате дней, а не лет. Если разделить это число на 365, получим приблизительный возраст — но он будет неточным из-за високосных годов. Например, человек, родившийся 29 февраля 2000 года, по такой формуле "постареет" на 1 день каждые 4 года.

Вторая проблема — текущая дата. Формула =СЕГОДНЯ() динамическая: она пересчитывается при каждом открытии файла. Это удобно для отчётов, но может сбить с толку, если вы фиксируете возраст на конкретную дату (например, для медицинской карты). В таких случаях лучше использовать статическую дату вроде =ДАТА(2026;5;15).

Третий нюанс — формат ячейки. Excel хранит даты как числа (количество дней с 1 января 1900 года), но отображает их в человекочитаемом виде. Если после вычитания дат вы видите число вроде 19345, а не возраст — проверьте формат ячейки: он должен быть Общий или Числовой, а не Дата.

⚠️ Внимание: В Excel для Mac функция ДАТАЗНАЧ может интерпретировать даты иначе, чем в Windows-версии. Например, ДАТАЗНАЧ("01.02.2020") на Mac преобразуется в 1 февраля, а на Windows — в 2 января. Всегда проверяйте региональные настройки!
📊 Какой формат даты вы чаще всего используете в Excel?
ДД.ММ.ГГГГ
ММ/ДД/ГГГГ
ГГГГ-ММ-ДД
Другой

Способ 1: Функция DATEDIF (РАЗНДАТ) — классика с подвохом

Функция DATEDIF (в русскоязычной версии — РАЗНДАТ) специально создана для расчёта разницы между датами. Её синтаксис:

=DATEDIF(дата_начала; дата_конца; единица_измерения)

Где единица_измерения может принимать значения:

  • 📅 "Y" — полные годы
  • 📆 "M" — полные месяцы
  • 🕒 "D" — полные дни
  • 📅📆 "YM" — месяцы без учёта лет
  • 📅🕒 "MD" — дни без учёта лет и месяцев
  • 📅📆🕒 "YD" — дни без учёта лет

Пример: чтобы посчитать возраст в годах, месяцах и днях для даты рождения в ячейке A2, используйте:

=DATEDIF(A2; СЕГОДНЯ(); "Y") & " лет, " & DATEDIF(A2; СЕГОДНЯ(); "YM") & " мес., " & DATEDIF(A2; СЕГОДНЯ(); "MD") & " дн."
⚠️ Внимание: Функция DATEDIF не документирована в официальной справке Microsoft, но работает во всех версиях Excel. Однако в Excel Online и некоторых локализованных версиях она может выдавать ошибку. Всегда тестируйте формулу перед использованием в важных документах!

Убедиться, что дата рождения в формате Дата|Проверить региональные настройки (Файл → Параметры → Язык)|Использовать СЕГОДНЯ() для динамического расчёта или фиксированную дату|Объединить результаты с текстом через &

-->

Способ 2: YEARFRAC — точный расчёт с учётом високосных лет

Функция YEARFRAC (в русскоязычной версии — ДОЛЯГОДА) возвращает разницу между датами в годах, учитывая високосные годы. Её синтаксис:

=YEARFRAC(дата_начала; дата_конца; [базис])

Параметр [базис] определяет метод расчёта (по умолчанию = 0):

БазисОписаниеПример для 366 дней
0 или опущенАмериканский метод (NASD)1.0000
1Фактическое/фактическое0.9973
2Фактическое/3601.0167
3Фактическое/3650.9973
4Европейский метод (30/360)1.0167

Для расчёта возраста лучше использовать базис=1 (фактическое количество дней). Формула будет такой:

=ЦЕЛОЕ(YEARFRAC(A2; СЕГОДНЯ(); 1))

Чтобы получить возраст с точностью до месяцев, умножьте дробную часть на 12:

=ЦЕЛОЕ(YEARFRAC(A2; СЕГОДНЯ(); 1)) & " лет, " & ОКРУГЛ((YEARFRAC(A2; СЕГОДНЯ(); 1)-ЦЕЛОЕ(YEARFRAC(A2; СЕГОДНЯ(); 1)))*12; 0) & " мес."

Способ 3: Комбинация функций ГОД, МЕСЯЦ, ДЕНЬ — для полного контроля

Если вам нужно раздельно получить годы, месяцы и дни, используйте комбинацию функций ГОД, МЕСЯЦ и ДЕНЬ. Этот метод даёт максимальную гибкость и работает во всех версиях Excel без исключений.

Формулы для ячейки с датой рождения A2:

  • 📅 Полных лет: =ГОД(СЕГОДНЯ())-ГОД(A2)-ЕСЛИ(ИЛИ(МЕСЯЦ(СЕГОДНЯ())<МЕСЯЦ(A2); И(МЕСЯЦ(СЕГОДНЯ())=МЕСЯЦ(A2); ДЕНЬ(СЕГОДНЯ())<ДЕНЬ(A2))); 1; 0)
  • 📆 Полных месяцев с учётом лет: =ЕСЛИ(ДЕНЬ(СЕГОДНЯ())>=ДЕНЬ(A2); МЕСЯЦ(СЕГОДНЯ())-МЕСЯЦ(A2); МЕСЯЦ(СЕГОДНЯ())-МЕСЯЦ(A2)-1)
  • 🕒 Полных дней с учётом месяцев: =ЕСЛИ(ДЕНЬ(СЕГОДНЯ())>=ДЕНЬ(A2); ДЕНЬ(СЕГОДНЯ())-ДЕНЬ(A2); ДЕНЬ(СЕГОДНЯ())+ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ())+1; 0))-ДЕНЬ(A2))

Этот метод единственный корректно обрабатывает даты рождения 29 февраля в невисокосные годы. Например, если человек родился 29.02.2000, то на 28.02.2023 ему исполнится 23 года — и именно это покажет формула, в отличие от DATEDIF, которая может ошибиться.

Почему формула для дней такая сложная?

Дело в том, что количество дней в месяце варьируется (28-31). Формула ДЕНЬ(ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ())+1; 0)) возвращает последний день текущего месяца. Например, для марта 2026 она вернёт 31, а для апреля — 30. Это позволяет корректно вычислять разницу дней даже при переходе через месяц.

Способ 4: Power Query — автоматическая обработка больших данных

Если вам нужно посчитать возраст для тысяч строк (например, в базе сотрудников или пациентов), ручной ввод формул неэффективен. Здесь поможет инструмент Power Query (в Excel 2016+ и 365):

  1. Выделите таблицу с датами рождения.
  2. Перейдите на вкладку Данные → Из таблицы/диапазона (или Get & Transform → Из таблицы в Excel 2016).
  3. В редакторе Power Query добавьте настраиваемый столбец с формулой:
    =Date.From(DateTime.LocalNow()) - [Дата рождения]

    (где [Дата рождения] — название вашего столбца).

  4. Преобразуйте новый столбец в дни (клик правой кнопкой → Изменить тип → Число).
  5. Добавьте ещё один столбец для расчёта лет: =Number.RoundDown([Дни]/365.25; 0).
  6. Нажмите Закрыть и загрузить.

Преимущество этого метода — автоматическое обновление при изменении исходных данных. Кроме того, Power Query позволяет очищать данные от ошибок (например, заменять пустые ячейки на среднее значение).

⚠️ Внимание: В Power Query даты хранятся в формате UTC, поэтому при работе с временными зонами может возникнуть расхождение в 1 день. Для точных расчётов используйте функцию DateTimeZone.SwitchTimeZone.

Способ 5: VBA-скрипт — для продвинутых пользователей

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

Sub CalculateAge()

Dim ws As Worksheet

Dim lastRow As Long

Dim i As Long

Set ws = ActiveSheet

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

' Добавляем заголовки столбцов

ws.Range("B1").Value = "Возраст (лет)"

ws.Range("C1").Value = "Возрастная группа"

' Рассчитываем возраст и группу

For i = 2 To lastRow

ws.Range("B" & i).Value = Application.WorksheetFunction.DatedIf(ws.Range("A" & i).Value, Date, "Y")

Select Case ws.Range("B" & i).Value

Case Is < 18: ws.Range("C" & i).Value = "Несовершеннолетний"

Case 18 To 35: ws.Range("C" & i).Value = "Молодой"

Case 36 To 60: ws.Range("C" & i).Value = "Зрелый"

Case Else: ws.Range("C" & i).Value = "Пожилой"

End Select

Next i

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Вернитесь в Excel и нажмите Alt + F8, выберите CalculateAge и кликните Run.

Этот метод удобен для регулярных отчётов, так как позволяет сохранять макрос в книге и запускать его одним кликом. Однако он требует базовых знаний VBA и включённого режима макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы).

Типичные ошибки и как их избежать

Даже опытные пользователи Excel сталкиваются с проблемами при расчёте возраста. Вот самые частотные ошибки и их решения:

  • 🔴 Ошибка #ЧИСЛО!: Возникает, если дата рождения позже текущей даты. Проверьте корректность ввода дат или используйте =ЕСЛИОШИБКА(DATEDIF(A2; СЕГОДНЯ(); "Y"); "Дата в будущем"; DATEDIF(A2; СЕГОДНЯ(); "Y")).
  • 🔴 Неправильный возраст для 29 февраля: Используйте метод с ГОД/МЕСЯЦ/ДЕНЬ или вручную заменяйте 29.02 на 28.02 в невисокосные годы.
  • 🔴 Формула не обновляется: Убедитесь, что в настройках Excel включен автоматический пересчёт (Формулы → Параметры вычислений → Автоматически).
  • 🔴 Некорректный формат ячейки: Если вместо возраста отображается дата (например, 01.01.1900), измените формат ячейки на Общий.
  • 🔴 Разные результаты на разных ПК: Проверьте региональные настройки (Файл → Параметры → Язык) — они влияют на интерпретацию дат.

Если вы работаете с Google Таблицами, учтите, что там нет функции DATEDIF. Вместо неё используйте:

=ARRAYFORMULA(IFERROR(FLOOR((TODAY()-A2:A)/365.25); ""))

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

Как посчитать возраст на конкретную дату в прошлом, а не на сегодня?

Замените СЕГОДНЯ() на фиксированную дату, например: =DATEDIF(A2; ДАТА(2020;12;31); "Y"). Это рассчитает возраст на 31 декабря 2020 года.

Почему у людей, родившихся в декабре, возраст иногда считается неправильно?

Это происходит из-за того, что функция DATEDIF с параметром "Y" учитывает полные годы. Например, если сегодня 1 января 2026, а день рождения 31 декабря 2000, то человек ещё не отпраздновал день рождения в этом году, и его возраст будет 22 года, а не 23. Чтобы исправить это, используйте формулу с ГОД/МЕСЯЦ/ДЕНЬ из Способа 3.

Можно ли посчитать возраст в месяцах для детей до года?

Да, используйте комбинацию: =DATEDIF(A2; СЕГОДНЯ(); "M") & " мес.". Для точности до дней добавьте: =DATEDIF(A2; СЕГОДНЯ(); "M") & " мес. " & DATEDIF(A2; СЕГОДНЯ(); "MD") & " дн.".

Как автоматически обновлять возраст при открытии файла?

Формулы с СЕГОДНЯ() обновляются автоматически. Если этого не происходит, проверьте настройки: Формулы → Параметры вычислений → Автоматически. Для принудительного обновления нажмите F9.

Как посчитать средний возраст группы людей?

Сначала рассчитайте возраст каждого человека (например, в столбце B), затем используйте =СРЗНАЧ(B2:B100). Для медианы используйте =МЕДИАНА(B2:B100).