Как правильно рассчитать возраст в Excel: формулы, примеры и нюансы

Если в ячейке Excel у вас записана дата рождения (например, 15.05.1990), а в соседней нужно получить возраст в полных годах, месяцах или днях — стандартное вычитание дат не даст корректный результат. Проблема в том, что Excel хранит даты как числа, и простое вычитание вернет количество дней между ними, а не возраст в привычном формате. Чтобы получить корректный расчет с учетом текущей даты, месяца и високосных лет, потребуются специальные функции: ДАТА(), ГОД(), МЕСЯЦ(), ДЕНЬ() или РАЗНДАТ() (в английской версии — DATEDIF).

Самая частая ошибка — использование формулы =ТДАТА()-A1, где A1 содержит дату рождения. Это даст количество дней, но не учтет, что возраст принято округлять до полных лет после дня рождения. Например, если сегодня 10.06.2026, а дата рождения 15.06.1990, то человек еще не отметил день рождения в этом году, и его возраст — 33 года, а не 34. В этой статье разберем 4 рабочих способа расчета возраста с учетом всех нюансов, включая скрытую функцию РАЗНДАТ(), которую Microsoft не документирует, но которая работает во всех версиях Excel.

1. Самый простой способ: функция РАЗНДАТ (DATEDIF)

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

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

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

  • 📅 "Y" — полные годы между датами;
  • 📆 "M" — полные месяцы (без учета лет);
  • 📇 "D" — полные дни (без учета месяцев и лет);
  • 📊 "YM" — месяцы с момента последнего дня рождения;
  • 📈 "MD" — дни с момента последнего месяца;
  • 📉 "YD" — дни с начала текущего года (игнорирует годы).

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

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

Если в ячейке A1 дата рождения 15.05.1990, а сегодня 10.06.2026, формула вернет 34 (даже если день рождения еще не наступил). Чтобы исправить это, используйте комбинацию:

=ЕСЛИ(ИЛИ(МЕСЯЦ(ТДАТА())>МЕСЯЦ(A1); И(МЕСЯЦ(ТДАТА())=МЕСЯЦ(A1); ДЕНЬ(ТДАТА())>=ДЕНЬ(A1))); РАЗНДАТ(A1; ТДАТА(); "Y"); РАЗНДАТ(A1; ТДАТА(); "Y")-1)

2. Расчет возраста с учетом текущего дня рождения

Если нужно, чтобы возраст увеличивался только после фактического дня рождения (а не 1 января), используйте комбинацию функций ГОД(), МЕСЯЦ() и ДЕНЬ(). Формула проверяет, прошел ли день рождения в текущем году:

=ГОД(ТДАТА())-ГОД(A1)-ЕСЛИ(ИЛИ(МЕСЯЦ(ТДАТА())<МЕСЯЦ(A1); И(МЕСЯЦ(ТДАТА())=МЕСЯЦ(A1); ДЕНЬ(ТДАТА())<ДЕНЬ(A1))); 1; 0)

Разберем, как она работает:

  1. ГОД(ТДАТА())-ГОД(A1) — разница в годах без учета месяца и дня;
  2. МЕСЯЦ(ТДАТА())<МЕСЯЦ(A1) — проверяет, не наступил ли еще месяц рождения;
  3. И(МЕСЯЦ(ТДАТА())=МЕСЯЦ(A1); ДЕНЬ(ТДАТА())<ДЕНЬ(A1)) — проверяет, не наступил ли еще день рождения в текущем месяце;
  4. ЕСЛИ(...; 1; 0) — если день рождения не прошел, вычитаем 1 год из результата.

Эта формула точнее, чем РАЗНДАТ(), так как не округляет возраст до ближайшего дня рождения. Например, для даты рождения 29.02.2000 (високосный год) и текущей даты 28.02.2026 она вернет 23, а не 24.

📊 Какой формат возраста вам нужнее?
Полные годы (например, 30)
Годы, месяцы и дни (например, 30 лет 2 мес. 5 дн.)
Только месяцы (например, 362 мес.)
Дни с момента рождения (например, 10950 дн.)

3. Возраст в годах, месяцах и днях

Чтобы получить возраст в формате 30 лет 5 месяцев 15 дней, используйте комбинацию из трех функций РАЗНДАТ():

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

Обратите внимание на параметры:

  • 📌 "Y" — полные годы;
  • 📌 "YM" — месяцы с последнего дня рождения (не суммарные!);
  • 📌 "MD" — дни с последнего месяца (не суммарные!).

Если нужно получить суммарное количество месяцев или дней (например, 365 месяцев или 11000 дней), используйте:

  • 📅 Для месяцев: =РАЗНДАТ(A1; ТДАТА(); "M");
  • 📅 Для дней: =РАЗНДАТ(A1; ТДАТА(); "D") или просто =ТДАТА()-A1.

1. Убедитесь, что дата рождения в ячейке имеет формат Дата (а не текст).

2. Проверьте, что текущая дата обновляется автоматически (используйте ТДАТА(), а не фиксированную дату).

3. Для високосных годов (например, 29.02) используйте формулу с ЕСЛИ, а не только РАЗНДАТ.

4. Если возраст отображается как дата (например, 45320), измените формат ячейки на Общий или Числовой.

-->

4. Ошибки при расчете возраста и как их исправить

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

Ошибка Причина Решение
Возраст на 1 год больше/меньше День рождения еще не наступил в текущем году, но РАЗНДАТ округляет вверх. Используйте формулу с ЕСЛИ (раздел 2).
Вместо возраста отображается дата (например, 45320) Ячейка имеет формат Дата, а не Общий. Выделите ячейку → ГлавнаяФормат ячеекЧисловой.
Ошибка #ИМЯ? Функция РАЗНДАТ не распознается (редко бывает в неанглийских версиях). Замените на DATEDIF или используйте альтернативную формулу.
Некорректный расчет для 29.02 Excel не учитывает, что в невисокосный год 29 февраля не существует. Используйте формулу с проверкой на високосный год (пример в спойлере).
Формула для корректного расчета возраста 29.02 в невисокосный год

=ЕСЛИ(И(ДЕНЬ(A1)=29; МЕСЯЦ(A1)=2; НЕ(ГОД(ТДАТА())=ГОД(A1)+РАЗНДАТ(A1; ТДАТА(); "Y"))); РАЗНДАТ(A1; ТДАТА(); "Y")-1; РАЗНДАТ(A1; ТДАТА(); "Y"))

Эта формула проверяет, не приходится ли дата рождения на 29 февраля, и если текущий год не високосный, уменьшает возраст на 1.

Еще одна распространенная ошибка — использование фиксированной даты вместо ТДАТА(). Например, если в формуле указано =РАЗНДАТ(A1; "31.12.2023"; "Y"), возраст не будет обновляться автоматически. Всегда используйте ТДАТА() для динамического расчета.

5. Альтернативные способы: без функции РАЗНДАТ

Если по какой-то причине РАЗНДАТ() не работает (например, в Excel Online или макросах), используйте комбинацию стандартных функций:

=ЦЕЛОЕ((ТДАТА()-A1)/365,25)

Здесь 365,25 — среднее количество дней в году с учетом високосных. Формула округляет результат до ближайшего целого числа. Для более точного расчета (без округления) используйте:

=ОТБР(ТДАТА()-A1)/365,25)

Чтобы получить возраст в месяцах:

=ЦЕЛОЕ((ТДАТА()-A1)/30,44)

Где 30,44 — среднее количество дней в месяце (365,25/12). Эти формулы менее точные, чем РАЗНДАТ(), но работают во всех версиях Excel.

6. Автоматическое обновление возраста

По умолчанию Excel не обновляет формулы в реальном времени. Чтобы возраст пересчитывался при открытии файла или изменении даты:

  1. Перейдите в ФормулыПараметры вычислений;
  2. Выберите Автоматически (если стоит Вручную);
  3. Для принудительного пересчета нажмите F9.

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

Private Sub Workbook_Open()

Application.CalculateFull

End Sub

Этот код нужно вставить в модуль ThisWorkbook (нажмите Alt+F11 → дважды кликните по имени файла в VBAProject).

Для больших таблиц (свыше 10 000 строк) автоматический пересчет может замедлять работу. В этом случае:

  • 📉 Отключите автоматический режим (ФормулыВручную);
  • 📈 Обновляйте данные вручную по кнопке или макросу;
  • 📊 Используйте Power Query для предварительной обработки дат.

7. Примеры для специфических задач

Рассмотрим нестандартные сценарии расчета возраста:

7.1. Возраст на определенную дату (не текущую)

Если нужно узнать, сколько лет было человеку на 01.01.2020:

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

7.2. Возраст в годах с десятичной дробью

Для точного расчета (например, 30,5 лет):

=РАЗНДАТ(A1; ТДАТА(); "Y") + (РАЗНДАТ(A1; ТДАТА(); "YM") + РАЗНДАТ(A1; ТДАТА(); "MD")/30)/12

7.3. Возраст в формате "25+", "30-35" и т.д.

Для группировки по возрастным категориям:

=ЕСЛИ(РАЗНДАТ(A1; ТДАТА(); "Y")<18; "до 18"; ЕСЛИ(РАЗНДАТ(A1; ТДАТА(); "Y")<30; "18-30"; ЕСЛИ(РАЗНДАТ(A1; ТДАТА(); "Y")<50; "30-50"; "50+")))

7.4. Возраст в римских цифрах

Для нестандартного отображения (например, XXXII вместо 32):

=РИМСКОЕ(РАЗНДАТ(A1; ТДАТА(); "Y"))

8. Оптимизация для больших таблиц

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

  • 🔹 Замените ТДАТА() на фиксированную дату (если обновление не требуется ежедневно):
  • =РАЗНДАТ(A1; ДАТА(2026;6;10); "Y")
  • 🔹 Используйте вспомогательные столбцы для промежуточных вычислений (например, отдельно рассчитайте годы, месяцы и дни, а затем объедините);
  • 🔹 Отключите автоматический пересчет (ФормулыВручную) и обновляйте данные по кнопке;
  • 🔹 Для статических отчетов преобразуйте формулы в значения (КопироватьСпециальная вставкаЗначения).

Если таблица содержит более 50 000 строк, рассмотрите возможность переноса расчетов в Power Query или Python (с использованием библиотеки pandas).

Пример кода на Python для расчета возраста

import pandas as pd

from datetime import datetime

df = pd.DataFrame({'birth_date': ['1990-05-15', '1985-11-20']})

df['birth_date'] = pd.to_datetime(df['birth_date'])

df['age'] = (datetime.now() - df['birth_date']).dt.days // 365.25

print(df)

Этот код рассчитывает возраст в годах с учетом високосных лет и работает быстрее, чем формулы Excel для больших данных.

⚠️ Внимание: При экспорте таблицы с возрастом в CSV или PDF проверьте, что даты сохраняют правильный формат. В некоторых версиях Excel при экспорте даты могут преобразовываться в числа (например, 45320 вместо 15.05.1990). Чтобы избежать этого, предварительно отформатируйте столбец как Текстовый или используйте функцию ТЕКСТ():

=ТЕКСТ(A1; "ДД.ММ.ГГГГ")

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

Как рассчитать возраст, если дата рождения в текстовом формате (например, "15 мая 1990")?

Сначала преобразуйте текст в дату с помощью функции ДАТАЗНАЧ():

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

Если ДАТАЗНАЧ не работает (в неанглийских версиях), используйте комбинацию ПСТР(), НАЙТИ() и ДАТА() для парсинга строки.

Почему функция РАЗНДАТ не работает в Excel Online?

В Excel Online функция РАЗНДАТ может быть отключена. Используйте альтернативу:

=ЦЕЛОЕ((ТДАТА()-A1)/365,25)

Или переключитесь на настольную версию Excel.

Как посчитать возраст в годах и месяцах без дней (например, "30 лет 5 мес.")?

Объедините две функции РАЗНДАТ:

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

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

=РАЗНДАТ(A1; ТДАТА(); "Y") & " лет" & ЕСЛИ(РАЗНДАТ(A1; ТДАТА(); "YM")>0; " " & РАЗНДАТ(A1; ТДАТА(); "YM") & " мес."; "")
Можно ли рассчитать возраст с учетом часов и минут?

Да, но для этого нужно использовать разницу в днях и преобразовать ее в часы/минуты:

=ТДАТА()-A1 & " дней (" & ОТБР((ТДАТА()-A1)*24; 0) & " часов)"

Для точного расчета с учетом времени рождения (если оно указано) используйте:

=ОТБР((ТДАТА()-A1)*24*60; 0) & " минут"
Как сделать, чтобы возраст обновлялся каждый день автоматически?

Включите автоматический пересчет формул:

  1. Перейдите на вкладку Формулы;
  2. Нажмите Параметры вычисленийАвтоматически;
  3. Убедитесь, что в формулах используется ТДАТА(), а не фиксированная дата.

Если файл открывается редко, добавьте макрос Workbook_Open (см. раздел 6).