Если в ячейке 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)
Разберем, как она работает:
ГОД(ТДАТА())-ГОД(A1)— разница в годах без учета месяца и дня;МЕСЯЦ(ТДАТА())<МЕСЯЦ(A1)— проверяет, не наступил ли еще месяц рождения;И(МЕСЯЦ(ТДАТА())=МЕСЯЦ(A1); ДЕНЬ(ТДАТА())<ДЕНЬ(A1))— проверяет, не наступил ли еще день рождения в текущем месяце;ЕСЛИ(...; 1; 0)— если день рождения не прошел, вычитаем 1 год из результата.
Эта формула точнее, чем РАЗНДАТ(), так как не округляет возраст до ближайшего дня рождения. Например, для даты рождения 29.02.2000 (високосный год) и текущей даты 28.02.2026 она вернет 23, а не 24.
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 не обновляет формулы в реальном времени. Чтобы возраст пересчитывался при открытии файла или изменении даты:
- Перейдите в
Формулы→Параметры вычислений; - Выберите
Автоматически(если стоитВручную); - Для принудительного пересчета нажмите
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или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) & " минут"Как сделать, чтобы возраст обновлялся каждый день автоматически?
Включите автоматический пересчет формул:
- Перейдите на вкладку
Формулы;- Нажмите
Параметры вычислений→Автоматически;- Убедитесь, что в формулах используется
ТДАТА(), а не фиксированная дата.Если файл открывается редко, добавьте макрос
Workbook_Open(см. раздел 6).