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

Почему стандартное вычитание дат в Excel работает некорректно

На первый взгляд, расчёт возраста в Microsoft Excel кажется простой задачей: достаточно вычесть дату рождения из текущей даты. Однако такой подход даёт неполные или искажённые результаты. Например, если человек родился 29 декабря 2000 года, а сегодня 1 января 2026 года, простое вычитание покажет разницу в 24 года и 3 дня — хотя по факту ему ещё не исполнилось 25 лет.

Проблема кроется в том, что Excel оперирует датами как числовыми значениями (количеством дней с 1 января 1900 года), но не учитывает календарные правила:

  • 📅 Полные годы считаются только после дня рождения в текущем году.
  • 🔄 Високосные годы добавляют лишний день в феврале.
  • 🎂 День рождения ещё не наступил — человек не "постарел" на год.

В этой статье разберём 5 надёжных способов посчитать возраст с учётом всех нюансов — от простых формул до автоматизированных решений с обновлением даты.

📊 Как часто вам нужно считать возраст по дате рождения?
Ежедневно (работа с клиентами)
Несколько раз в месяц
Рядом (для личных целей)
Первый раз столкнулся

Способ 1: Формула DATEDIF — самый точный метод

Функция DATEDIF (от англ. Date Difference) специально разработана для расчёта разницы между датами в годах, месяцах или днях. Она скрыта в интерфейсе Excel, но работает во всех версиях программы, включая Excel 365 и Excel 2019.

Синтаксис функции:

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

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

  • 🔢 "Y" — полные годы.
  • 📆 "M" — полные месяцы (без учёта лет).
  • 📅 "D" — дни (без учёта месяцев и лет).
  • 🔄 "YM" — месяцы с учётом лет (например, 2 года и 3 месяца).
  • 🎯 "MD" — дни с учётом месяцев (например, 2 месяца и 15 дней).
  • 📊 "YD" — дни с учётом лет (например, 2 года и 45 дней).

Пример для ячейки A1 с датой рождения (15.05.1990) и текущей датой в B1 (сегодня):

=DATEDIF(A1; B1; "Y")

Эта формула вернёт полное количество лет, даже если день рождения ещё не наступил в текущем году.

⚠️ Внимание: Если в ячейке B1 указан год раньше, чем в A1 (например, дата рождения в 2000 году, а текущая дата — 1999), Excel вернёт ошибку #ЧИСЛО!. Всегда проверяйте порядок дат.

Ячейка с датой рождения в формате даты (не текст!)|Текущая дата позже даты рождения|Формат ячейки с результатом — "Общий" или "Числовой"|Нет пустых ячеек в формуле-->

Способ 2: Комбинация YEARFRAC + INT для дробных лет

Если вам нужно получить возраст в полных годах с дробной частью (например, 24.75 лет), используйте функцию YEARFRAC (от англ. Year Fraction). Она рассчитывает долю года между двумя датами.

Формула для ячейки C1:

=YEARFRAC(A1; B1; 1)

Где 1 — это метод расчёта (по фактическому количеству дней в году). Чтобы получить только полные годы, оберните результат в INT:

=INT(YEARFRAC(A1; B1; 1))

Отличие от DATEDIF:

  • ✅ Возвращает дробные значения (полезно для статистики).
  • ❌ Менее точен для календарных расчётов (может округлять дни).
  • 🔄 Поддерживает разные методы расчёта (параметр 1–4).

Метод Описание Пример
1 Фактическое количество дней в году (365 или 366) =YEARFRAC(A1; B1; 1)
2 360 дней в году (банковский метод) =YEARFRAC(A1; B1; 2)
3 365 дней в году (игнорирует високосные) =YEARFRAC(A1; B1; 3)
4 360 дней, но месяцы считаются как 30 дней =YEARFRAC(A1; B1; 4)

Способ 3: Расчёт возраста с учётом месяцев и дней

Часто требуется указать возраст не только в годах, но и в месяцах/днях (например, "24 года, 3 месяца, 15 дней"). Для этого комбинируем несколько функций:

Формула для ячейки D1 (возраст в формате текста):

=DATEDIF(A1; B1; "Y") & " г., " & DATEDIF(A1; B1; "YM") & " мес., " & DATEDIF(A1; B1; "MD") & " дн."

Где:

  • DATEDIF(A1; B1; "Y") — полные годы.
  • DATEDIF(A1; B1; "YM") — месяцы с учётом полных лет.
  • DATEDIF(A1; B1; "MD") — дни с учётом полных месяцев.

Если нужно разделить результат по разным ячейкам:

=DATEDIF(A1; B1; "Y")  // годы

=DATEDIF(A1; B1; "YM") // месяцы

=DATEDIF(A1; B1; "MD") // дни

⚠️ Внимание: При копировании формулы в другие ячейки Excel может автоматически изменять ссылки на A1 и B1. Чтобы зафиксировать их, используйте абсолютные ссылки: $A$1 и $B$1.
Как проверить формат ячейки с датой?

Если Excel воспринимает дату как текст (например, "15.05.1990" не преобразуется в дату), выполните следующие шаги:

1. Выделите ячейку.

2. Нажмите Ctrl + 1 (или правая кнопка → "Формат ячеек").

3. Выберите категорию "Дата" и укажите нужный формат (например, "14.03.2012").

4. Если дата отображается как число (например, 44661), снова примените формат "Дата".

Способ 4: Автоматическое обновление возраста с функцией TODAY

Чтобы возраст пересчитывался автоматически при открытии файла, используйте динамическую функцию TODAY(). Она возвращает текущую дату и обновляется при каждом пересчёте листа.

Пример формулы для ячейки E1:

=DATEDIF(A1; TODAY(); "Y")

Преимущества этого метода:

  • 🔄 Всегда актуальные данные (не нужно вручную обновлять дату).
  • 📊 Подходит для отчётов и таблиц с большим количеством записей.
  • ⚡ Быстрое выполнение (не требует макросов).

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

Способ 5: Пользовательская функция на VBA для сложных расчётов

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

Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и добавьте код:

Function Age(birthDate As Date, Optional endDate As Variant) As String

If IsMissing(endDate) Then endDate = Date

Dim years As Integer, months As Integer, days As Integer

years = DateDiff("yyyy", birthDate, endDate)

If DateSerial(Year(endDate), Month(birthDate), Day(birthDate)) > endDate Then

years = years - 1

End If

months = DateDiff("m", DateSerial(Year(endDate), Month(birthDate), Day(birthDate)), endDate)

If Day(endDate) < Day(birthDate) Then months = months - 1

days = endDate - DateSerial(Year(endDate), Month(endDate), Day(birthDate)) + IIf(Day(endDate) < Day(birthDate), DateSerial(Year(endDate), Month(endDate) + 1, 0), 0)

Age = years & " лет, " & months & " мес., " & days & " дн."

End Function

Теперь в Excel можно использовать функцию как обычно:

=Age(A1)

или с указанием конечной даты:

=Age(A1; B1)

⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm. При открытии такого файла Excel может показать предупреждение о безопасности — разрешите выполнение макросов, если доверяете источнику.

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

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

1. Дата в формате текста

Если дата рождения введена как текст (например, "15/05/1990"), Excel не сможет её распознать. Решение:

  • 🔄 Используйте Дата → Текст по столбцам (на вкладке Данные).
  • 📅 Или введите дату заново в формате ДД.ММ.ГГГГ.

2. Ошибка #ЧИСЛО! в DATEDIF

Возникает, если:

  • 🔙 Дата рождения позже текущей даты.
  • 🚫 Одна из ячеек пустая или содержит ошибку.
  • 📌 Неправильный формат ячейки (например, "Общий" вместо "Дата").

Проверьте порядок дат и форматы ячеек.

3. Некорректный расчёт високосных годов

Функции DATEDIF и YEARFRAC учитывают високосные годы, но если вы используете ручные вычисления (например, вычитание дат), результат может искажаться. Решение: всегда применяйте специализированные функции.

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст вместо даты Преобразуйте текст в дату через Формат ячеек
#ИМЯ? Опечатка в названии функции Проверьте синтаксис (например, DATEDIF, а не DATEIF)
Неправильный возраст Текущая дата раньше даты рождения Используйте TODAY() или проверьте порядок дат

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

Можно ли посчитать возраст в Excel Online?

Да, все описанные формулы (DATEDIF, YEARFRAC, TODAY) работают в Excel Online. Однако макросы на VBA в веб-версии не поддерживаются.

Как посчитать возраст в годах и месяцах без дней?

Используйте комбинацию:

=DATEDIF(A1; B1; "Y") & " лет, " & DATEDIF(A1; B1; "YM") & " мес."

Эта формула вернёт результат в формате "24 года, 3 месяца".

Почему функция TODAY() не обновляется?

Возможные причины:

  • 🔄 Режим вычислений установлен в Вручную (проверьте в Формулы → Параметры вычислений).
  • 📥 Файл открыт в режиме Только для чтения.
  • 🖥️ Макросы отключены (если TODAY() используется в пользовательской функции).

Как посчитать возраст для большого списка дат?

Если у вас столбец с датами рождения (например, A2:A100), протяните формулу вниз:

  1. Введите формулу в первую ячейку (например, B2): =DATEDIF(A2; TODAY(); "Y").
  2. Наведите курсор на правый нижний угол ячейки B2 (появится крестик).
  3. Дважды кликните или протяните вниз до конца списка.

Можно ли посчитать возраст с учётом времени (часов и минут)?

Да, но это редко требуется для возраста. Используйте функцию NOW() вместо TODAY() и вычитайте даты как числа:

=NOW() - A1

Результат будет в днях с дробной частью (например, 9125.375 — 9125 дней и 9 часов). Чтобы преобразовать в годы:

= (NOW() - A1) / 365.25