Как вычислить текущий возраст в Excel: формулы, ошибки и лайфхаки

Почему Excel ошибается в расчете возраста и как это исправить

Вы когда-нибудь пробовали вычесть год рождения из текущего года в Excel, чтобы получить возраст, и получали странные результаты? Например, для человека, родившегося 31 декабря 1990 года, формула =2026-1990 даст 34 года... даже если сегодня 1 января 2026. А реальный возраст на эту дату — ещё 33. Вот эта разница в один день (или даже год!) и становится головной болью для многих пользователей.

Проблема в том, что Excel хранит даты как числа (количество дней с 1 января 1900 года), а не как текст. Простое вычитание годов игнорирует месяцы и дни — поэтому и возникают ошибки. К счастью, в арсенале программы есть специализированные функции, которые учитывают все нюансы календаря: високосные годы, разную длину месяцев и даже временные зоны (если работать с UTC). В этой статье разберём 5 рабочих способов — от элементарных до продвинутых — с примерами для разных версий Excel (включая Excel 365 и Excel 2026).

Спойлер: самый надёжный метод — функция DATEDIF, но она скрыта в интерфейсе и не появляется в подсказках. А для динамического обновления возраста потребуется комбинация с TODAY. Но обо всём по порядку.

Метод 1: Функция DATEDIF — скрытый, но самый точный способ

Функция DATEDIF (от англ. DATE DIFFerence) специально создана для расчёта разницы между датами в годах, месяцах или днях. Она существует ещё со времён Lotus 1-2-3 (предшественника Excel), но по неизвестным причинам не документирована в официальной справке Microsoft. Тем не менее, она работает во всех версиях программы, включая Excel Online.

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

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

Где единица_измерения может принимать следующие значения:

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

Для расчёта возраста нам нужен параметр "Y". Пример:

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

Где B2 — ячейка с датой рождения, а TODAY() — текущая дата.

Метод 2: Комбинация TODAY + YEAR — для тех, кто любит прозрачность

Если вас смущает "недокументированность" DATEDIF, можно обойтись стандартными функциями. Формула ниже вычисляет разницу в годах между текущей датой и датой рождения, а затем корректирует результат с учётом месяца и дня:

=YEAR(TODAY()) - YEAR(B2) - IF(OR(MONTH(TODAY())

Разберём логику:

  1. YEAR(TODAY()) - YEAR(B2) — базовая разница в годах.
  2. OR(MONTH(TODAY()) — проверяет, не наступило ли ещё день рождения в этом году.
  3. IF(условие; 1; 0) — если день рождения ещё не был, вычитаем 1 год.

Этот метод более универсален, так как использует только документированные функции. Однако он сложнее для восприятия и занимает больше места в строке формул.

📊 Какой метод расчёта возраста вы используете чаще?
DATEDIF
YEAR + TODAY
Ручной ввод
Другой

Метод 3: Динамический возраст с учётом месяцев и дней

Часто требуется не только количество полных лет, но и точный возраст с учётом месяцев и дней (например, "32 года, 5 месяцев, 14 дней"). Для этого комбинируем несколько вызовов DATEDIF:

=DATEDIF(B2; TODAY(); "Y") & " лет, " & DATEDIF(B2; TODAY(); "YM") & " мес., " & DATEDIF(B2; TODAY(); "MD") & " дн."

Результат будет выглядеть как текстовая строка. Обратите внимание на использование & — оператора конкатенации (объединения текста).

Дата рождения Текущая дата Формула Результат
15.05.1990 10.03.2026 =DATEDIF(B2; TODAY(); "Y") 33
15.05.1990 10.03.2026 =DATEDIF(B2; TODAY(); "YM") 9
15.05.1990 10.03.2026 =DATEDIF(B2; TODAY(); "MD") 24
31.12.1990 01.01.2026 =DATEDIF(B2; TODAY(); "Y") 33

Критическая особенность: если дата рождения позже текущей даты (например, опечатка в годе), функция DATEDIF вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, добавьте проверку с IFERROR.

Ячейка с датой рождения отформатирована как "Дата"|Текущая дата не раньше даты рождения|Нет опечаток в годе (например, 1890 вместо 1990)|Формула скопирована без ошибок-->

Метод 4: Возраст на конкретную дату (не сегодня)

Иногда нужно узнать, сколько человеку было лет на определённую дату в прошлом или будущем. Например, для расчёта стажа или проверки возраста на момент события. В этом случае заменяем TODAY() на фиксированную дату:

=DATEDIF(B2; "15.07.2020"; "Y")

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

=DATEDIF(B2; C2; "Y")

Где C2 — ячейка с датой, на которую нужно рассчитать возраст.

⚠️ Внимание: Если вы работаете с историческими данными (например, возраст на 1 января 2000 года), убедитесь, что в настройках Excel включён расчёт дат до 1900 года. В противном случае формулы могут возвращать некорректные значения для дат до 1900-го.

Метод 5: Возраст в годах с дробной частью (для аналитики)

В медицинских или статистических расчётах иногда требуется возраст в виде десятичного числа (например, 32.5 лет вместо "32 года и 6 месяцев"). Для этого используем простую формулу:

=(TODAY() - B2) / 365.25

Почему делим на 365.25, а не на 365? Потому что:

  • 🌍 Високосный год добавляет 1 день каждые 4 года.
  • ⏳ Средняя длина года — 365.25 дней (учитывает високосные годы).
  • 📊 Это даёт более точный результат для долговременных расчётов.

Если нужна высокая точность (например, для научных исследований), замените 365.25 на 365.2425 — это учтёт правило, что годы, кратные 100, не являются високосными (за исключением тех, что кратны 400).

Почему нельзя просто делить на 365?

Если разделить разницу в днях на 365, то через 4 года ошибка составит 1 день (из-за неучтённого високосного года). Для коротких периодов это некритично, но для расчётов на десятилетия погрешность будет значительной. Например, для человека 1990 года рождения ошибка в 2026 году составит уже ~0.01 года (3.65 дня).

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

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

  1. Дата в текстовом формате. Если ячейка с датой рождения отформатирована как текст (например, "15.05.1990" без преобразования в дату), формулы вернут ошибку. Решение: используйте ДАТАЗНАЧ (или DATEVALUE в английской версии) для преобразования:
    =DATEDIF(ДАТАЗНАЧ(B2); TODAY(); "Y")
  2. Двузначные годы. Если ввести "15.05.90" вместо "15.05.1990", Excel может интерпретировать это как 2090 год. Решение: всегда указывайте год полностью или настройте формат ячейки на четырёхзначный год.
  3. Отрицательный возраст. Если текущая дата случайно указана раньше даты рождения, формула вернёт ошибку. Решение: добавьте проверку:
    =IF(TODAY()>B2; DATEDIF(B2; TODAY(); "Y"); "Ошибка: дата рождения позже текущей")
⚠️ Внимание: В Excel для Mac функция DATEDIF может вести себя иначе из-за различий в обработке дат. Если результат не совпадает с ожидаемым, проверьте настройки региональных параметров (особенно формат даты).

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

Можно ли рассчитать возраст без функции TODAY, если дата фиксированная?

Да, просто замените TODAY() на конкретную дату в кавычках (например, "31.12.2023") или ссылку на ячейку с датой. Например:

=DATEDIF(B2; "31.12.2023"; "Y")

Это полезно для расчёта возраста на историческую дату или прогноза на будущее.

Почему моя формула возвращает ###### вместо числа?

Это означает, что столбец слишком узкий для отображения результата. Расширьте столбец или измените формат ячейки на "Общий". Также проверьте, не является ли результат отрицательным числом (например, если дата рождения позже текущей даты).

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

Используйте параметр "M" в DATEDIF:

=DATEDIF(B2; TODAY(); "M")

Для точности до дней добавьте:

=DATEDIF(B2; TODAY(); "M") & " мес. " & DATEDIF(B2; TODAY(); "MD") & " дн."
Работает ли DATEDIF в Google Sheets?

Да, функция DATEDIF полностью поддерживается в Google Таблицах с тем же синтаксисом. Однако в Google Sheets также есть альтернативная функция =YEARS (из семейства DATEDIFF), которая может быть удобнее для некоторых задач.

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

Функция TODAY() пересчитывается при каждом открытии файла или изменении ячеек. Если нужно принудительно обновить все даты, нажмите F9 (пересчёт формул). Для полной перезагрузки данных используйте Ctrl + Alt + F9.