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

Почему стандартные методы вычитания дат в Excel не работают для возраста

На первый взгляд, вычесть дату рождения из текущей даты в Microsoft Excel кажется тривиальной задачей. Однако большинство пользователей сталкиваются с неожиданными результатами: вместо целого числа лет программа выдаёт дробное значение вроде 27,34 или вовсе ошибочный формат даты. Всё дело в том, что Excel оперирует датами как числовыми значениями (где 1 = 1 января 1900 года), а возраст требует учёта календарной логики — полных лет, месяцев и дней.

К примеру, если сегодня 15.05.2026, а дата рождения — 20.12.1995, простое вычитание =ТДАТА()-B2 вернёт 10 606 (количество дней). Но вам-то нужны годы, причём с учётом того, прошёл ли уже день рождения в текущем году! Здесь на помощь приходят специализированные функции, о которых большинство пользователей даже не подозревает.

Способ 1: Функция РАЗНДАТ (DATEDIF) — скрытый инструмент Excel

Функция РАЗНДАТ (или DATEDIF в английской версии) — это полусекретный инструмент Excel, который не отображается в мастер-функций, но работает во всех версиях программы, включая Excel 365 и Excel 2019. Она специально создана для расчёта разницы между датами в годах, месяцах или днях.

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

=РАЗНДАТ(дата_начала; дата_конца; единица_измерения)

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

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

Пример для расчёта возраста в годах:

=РАЗНДАТ(B2; ТДАТА(); "Y")

Где B2 — ячейка с датой рождения, а ТДАТА() возвращает текущую дату.

Способ 2: Комбинация ГОДСЕГОДНЯ и ГОД для точного возраста

Если функция РАЗНДАТ кажется вам неинтуитивной, альтернативный метод — использовать пару функций ГОДСЕГОДНЯ() (или YEAR(TODAY())) и ГОД(). Этот подход даёт тот же результат, но более прозрачен для понимания:

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

Однако у этого метода есть критическая ошибка: он не учитывает, прошёл ли уже день рождения в текущем году. Например, если сегодня 10.01.2026, а дата рождения — 15.12.2000, формула вернёт 24, хотя человеку ещё только 23. Чтобы исправить это, добавьте проверку:

=ГОДСЕГОДНЯ() - ГОД(B2) - ЕСЛИ(ИЛИ(МЕСЯЦ(ТДАТА())<МЕСЯЦ(B2); И(МЕСЯЦ(ТДАТА())=МЕСЯЦ(B2); ДЕНЬ(ТДАТА())<ДЕНЬ(B2))); 1; 0)
Почему формула не работает в Google Sheets?

В Google Таблицах функция ГОДСЕГОДНЯ() называется TODAY(), а ТДАТА()NOW(). Также может потребоваться замена точек с запятой (;) на запятые (,) в зависимости от региональных настроек.

Способ 3: Автоматическое обновление возраста без формул (Power Query)

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

Алгоритм действий:

  1. Выделите столбец с датами рождения.
  2. Перейдите на вкладку ДанныеИз таблицы/диапазона (или Get Data → From Table/Range).
  3. В открывшемся редакторе Power Query добавьте настраиваемый столбец с формулой:
    = Date.Year(DateTime.LocalNow()) - Date.Year([Дата рождения]) - (DateTime.LocalNow() < DateTime.Date(Date.AddYears([Дата рождения], Date.Year(DateTime.LocalNow()) - Date.Year([Дата рождения])))) ? 1 : 0
  4. Закройте редактор и сохраните запрос.

Теперь возраст будет обновляться при каждом нажатии Обновить все (или Refresh All). Этот метод особенно актуален для динамических отчётов, где данные подгружаются из внешних источников.

📊 Какой способ расчёта возраста вы используете чаще?
Формулы в ячейках
Power Query
VBA-скрипты
Ручной ввод

Способ 4: Учёт месяцев и дней в возрасте (точный расчёт)

Часто требуется не просто количество полных лет, а точный возраст с учётом месяцев и дней — например, 25 лет, 3 месяца, 10 дней. Для этого комбинируем несколько функций:

Компонент возраста Формула Пример результата
Полные годы =РАЗНДАТ(B2; ТДАТА(); "Y") 25
Полные месяцы (свыше лет) =РАЗНДАТ(B2; ТДАТА(); "YM") 3
Полные дни (свыше месяцев) =РАЗНДАТ(B2; ТДАТА(); "MD") 10
Общий возраст в днях =РАЗНДАТ(B2; ТДАТА(); "D") 9 215

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

=РАЗНДАТ(B2; ТДАТА(); "Y") & " лет, " & РАЗНДАТ(B2; ТДАТА(); "YM") & " мес., " & РАЗНДАТ(B2; ТДАТА(); "MD") & " дн."

Ошибки и решения: почему Excel неправильно считает возраст

Даже с правильными формулами Excel может выдавать некорректные результаты. Вот топ-5 причин и способы их исправления:

⚠️ Внимание: Если дата рождения введена как текст (например, "15.05.1990" в кавычках), Excel воспримет её как строку, а не как дату. Проверьте формат ячейки: он должен быть Дата (Date).
  • 🗓️ Неправильный региональный формат: В американской локализации Excel даты вводятся как MM/DD/YYYY, а в российской — DD.MM.YYYY. Если после ввода даты она отображается как 44197 (число), измените формат ячейки на Дата.
  • Не обновляется текущая дата: Функция ТДАТА() не пересчитывается автоматически при открытии файла. Чтобы принудительно обновить, нажмите F9 или перейдите в Формулы → Вычислить сейчас.
  • 🔢 Отрицательный возраст: Если дата рождения позже текущей даты (например, опечатка в годе), Excel вернёт ошибку. Используйте проверку:
    =ЕСЛИ(B2>ТДАТА(); "Ошибка даты"; РАЗНДАТ(B2; ТДАТА(); "Y"))
  • 📊 Неправильное округление: Формулы вроде =ГОДСЕГОДНЯ()-ГОД(B2) могут требовать округления вниз. Используйте =ЦЕЛОЕ(ГОДСЕГОДНЯ()-ГОД(B2)).

☑️ Проверка перед расчётом возраста

Выполнено: 0 / 5

Продвинутые сценарии: возраст на определённую дату и массовый расчёт

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

=РАЗНДАТ(B2; ДАТА(2020; 1; 1); "Y")

Для массового расчёта (например, для списка из 10 000 строк) оптимизируйте формулы:

  1. Используйте ТДАТА() как одну ячейку (например, $A$1) и ссылайтесь на неё в формулах. Так Excel пересчитает её только один раз.
  2. Отключите автоматический пересчёт: Формулы → Параметры вычислений → Вручную (актуально для больших файлов).
  3. Для Excel 365 используйте динамические массивы:
    =РАЗНДАТ(B2:B1000; ТДАТА(); "Y")

    Это прольёт результат сразу для всего диапазона.

⚠️ Внимание: При работе с большими диапазонами (более 10 000 строк) избегайте вложенных функций ЕСЛИ — они тормозят пересчёт. Замените их на ВПР или ИНДЕКС/ПОИСКПОЗ для категоризации возрастов (например, "18-25", "26-35").

FAQ: Частые вопросы о расчёте возраста в Excel

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

Да, но с нюансами:

  • В Excel Online работают те же формулы, что и в десктопной версии, включая РАЗНДАТ.
  • В Google Sheets функция DATEDIF также поддерживается, но может требовать ручного ввода (её нет в списке автозаполнения). Альтернатива:
    =YEAR(TODAY()) - YEAR(B2) - (TODAY() < DATE(YEAR(TODAY()); MONTH(B2); DAY(B2)))
Как посчитать возраст в годах и месяцах без дней (например, 5 лет 2 месяца)?

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

=РАЗНДАТ(B2; ТДАТА(); "Y") & " лет " & РАЗНДАТ(B2; ТДАТА(); "YM") & " мес."

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

=РАЗНДАТ(B2; ТДАТА(); "Y") & " лет" & ЕСЛИ(РАЗНДАТ(B2; ТДАТА(); "YM")>0; " " & РАЗНДАТ(B2; ТДАТА(); "YM") & " мес."; "")
Почему функция РАЗНДАТ возвращает #ИМЯ? вместо результата?

Причины и решения:

  • Опечатка в названии: Проверьте, что функция введена как РАЗНДАТ (для русскоязычной версии) или DATEDIF (для английской).
  • Неправильные разделители: В некоторых локализациях вместо точек с запятой (;) нужны запятые (,).
  • Ячейка не в формате даты: Выделите ячейку с датой рождения и нажмите Ctrl+1, затем выберите формат Дата.
Как автоматически обновлять возраст при открытии файла?

Excel не обновляет ТДАТА() автоматически при открытии книги. Чтобы это исправить:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте этот код в модуль ThisWorkbook:
    Private Sub Workbook_Open()
    

    Application.CalculateFull

    End Sub

  3. Сохраните файл как .xlsm (с поддержкой макросов).

Теперь при каждом открытии файла все формулы с ТДАТА() пересчитаются.

Можно ли рассчитать возраст с учётом високосных годов?

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

=ТДАТА()-B2

И отформатируйте ячейку как Числовой формат без десятичных знаков.