Расчёт возраста в Microsoft Excel или Google Таблицах — одна из самых востребованных задач при работе с персональными данными, кадровым учётом или аналитикой. Казалось бы, что может быть проще: вычесть дату рождения из текущей даты. Но на практике пользователи сталкиваются с ошибками вроде некорректного учёта високосных годов, отрицательных значений или «сбившихся» формул при обновлении файла. Эта статья поможет разобраться, как точно посчитать возраст на сегодняшний день с учётом всех нюансов, включая автоматическое обновление результата при открытии файла.
Мы рассмотрим 5 рабочих методов — от стандартной функции РАЗНДАТ (или DATEDIF в английской версии) до комбинаций с ТДАТА, СЕГОДНЯ и даже Power Query для обработки больших массивов данных. Особое внимание уделим типичным ошибкам: почему формула может показывать возраст на вчерашний день или как избежать проблем с форматом ячеек. В конце статьи вы найдёте FAQ с ответами на частые вопросы и таблицу сравнения методов по точности и удобству.
1. Базовый метод: функция РАЗНДАТ (DATEDIF) для точного расчёта
Функция РАЗНДАТ (в английской версии Excel — DATEDIF) специально создана для вычисления разницы между двумя датами в годах, месяцах или днях. Несмотря на то, что она не документирована в официальной справке Microsoft, она работает во всех версиях программы, включая Excel 365 и Excel 2019.
Синтаксис функции:
=РАЗНДАТ(дата_начала; дата_конца; единица_измерения)
Где единица_измерения может принимать следующие значения:
- 📅 "Y" — полные годы (игнорирует месяцы и дни)
- 📆 "M" — полные месяцы (игнорирует дни)
- 🕒 "D" — полные дни
- 📅📆 "YM" — месяцы без учёта годов и дней
- 📅🕒 "YD" — дни без учёта годов
- 📆🕒 "MD" — дни без учёта месяцев и годов
Чтобы посчитать возраст на текущую дату, используйте комбинацию с функцией СЕГОДНЯ:
=РАЗНДАТ(A2; СЕГОДНЯ;"Y")
Где A2 — ячейка с датой рождения. Эта формула вернёт количество полных лет на сегодняшний день.
⚠️ Внимание: Если дата рождения в будущем (например, опечатка в году), функция вернёт ошибку#ЧИСЛО!. Проверьте формат ячейки с датой — он должен бытьДата, а неТекст.
Формат ячейки с датой рождения —"Дата"|Дата рождения не в будущем|Функция СЕГОДНЯ обновляется автоматически|Ячейка результата имеет общий формат
-->
2. Альтернатива: комбинация ГОД, МЕСЯЦ и ДЕНЬ для гибкости
Если функция РАЗНДАТ по какой-то причине недоступна (например, в некоторых локализациях Excel), можно использовать альтернативный подход с функциями ГОД, МЕСЯЦ и ДЕНЬ. Этот метод даёт больше контроля над расчётом и позволяет учитывать неполные годы.
Формула для расчёта полных лет:
=ГОД(СЕГОДНЯ) - ГОД(A2) - ЕСЛИ(ИЛИ(МЕСЯЦ(СЕГОДНЯ)<МЕСЯЦ(A2); И(МЕСЯЦ(СЕГОДНЯ)=МЕСЯЦ(A2); ДЕНЬ(СЕГОДНЯ)<ДЕНЬ(A2))); 1; 0)
Разберём логику:
- Вычисляем разницу лет между текущей датой и датой рождения.
- Проверяем, прошёл ли день рождения в этом году:
- Если текущий месяц меньше месяца рождения — вычитаем 1 год.
- Если месяцы равны, но текущий день меньше дня рождения — тоже вычитаем 1 год.
Преимущество этого метода — возможность раздельного вывода лет, месяцев и дней. Например, чтобы получить возраст в формате «25 лет, 3 месяца, 10 дней», используйте:
=РАЗНДАТ(A2; СЕГОДНЯ;"Y") &" лет," & РАЗНДАТ(A2; СЕГОДНЯ;"YM") &" мес.," & РАЗНДАТ(A2; СЕГОДНЯ;"MD") &" дн."
Функция РАЗНДАТ (DATEDIF)|Комбинация ГОД/МЕСЯЦ/ДЕНЬ|Формула с ТДАТА|Power Query|Другой вариант-->
3. Автоматическое обновление: функция ТДАТА vs СЕГОДНЯ
Обе функции — ТДАТА (в английской версии TODAY) и СЕГОДНЯ — возвращают текущую дату, но есть нюансы:
| Функция | Описание | Обновление | Поддержка в Google Таблицах |
|---|---|---|---|
ТДАТА |
Возвращает текущую дату как серийный номер | Автоматически при пересчёте листа | Нет (используйте TODAY) |
СЕГОДНЯ |
Аналог ТДАТА, но с русским названием |
Автоматически | Да |
NOW |
Возвращает дату и время | Автоматически | Да |
Критичный нюанс: если файл не открывался несколько дней, формулы с СЕГОДНЯ не обновятся retroactively. То есть, если вы открыли файл 5 июня, а сегодня 10 июня, возраст будет рассчитан на 5 июня. Чтобы избежать этого, используйте макрос или Power Query (см. раздел 5).
Пример формулы с ТДАТА для вывода возраста в годах и месяцах:
=ЦЕЛОЕ((ТДАТА-A2)/365) &" лет," & ОСТАТ((ТДАТА-A2)/30;12) &" мес."
⚠️ Внимание: Деление на 365 или 30 — упрощённая модель! Для точного расчёта месяцев используйтеРАЗНДАТс параметром"YM".
4. Учёт високосных годов и точный расчёт дней
Ошибка многих пользователей — деление разницы дат на 365 для получения лет. Этот метод даёт погрешность из-за високосных годов (где 366 дней). Например, разница между 28.02.2020 и 28.02.2026 составит 1461 день, а не 1460 (4 × 365).
Чтобы посчитать возраст с учётом високосных лет, используйте:
=РАЗНДАТ(A2; СЕГОДНЯ;"Y") &" лет и" & РАЗНДАТ(A2; СЕГОДНЯ;"YD") &" дней"
Для вывода точного количества дней между датами (например, для медицинских или юридических расчётов):
=СЕГОДНЯ-A2
Но результат будет в формате серийного номера. Чтобы отобразить его как дни, измените формат ячейки на Общий или используйте:
=ТЕКСТ(СЕГОДНЯ-A2;"0 дней")
Почему деление на 365.25 не решает проблему?
Деление на 365.25 (с учётом средней длины года) даёт приблизительный результат, но не учитывает:
1) Правило високосных лет (кратные 100 не являются високосными, кроме кратных 400).
2) Фактическую разницу в днях между конкретными датами.
Например, между 01.01.2000 и 01.01.2026 прошло 24 года, но 8905 дней (а не 24 × 365.25 = 8766).
5. Продвинутый метод: Power Query для массового расчёта
Если вам нужно рассчитать возраст для тысяч строк (например, в кадровой базе), ручное применение формул неэффективно. В этом случае поможет Power Query — инструмент для преобразования данных, доступный в Excel 2016 и новее.
Алгоритм действий:
- Выделите таблицу с датами рождения и перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В редакторе Power Query добавьте столбец с формулой:
= Date.From(DateTime.LocalNow) - [Дата рождения]Где
[Дата рождения]— название вашего столбца. - Преобразуйте результат в годы, разделив на 365.25 (или используйте
Duration.Daysдля точного количества дней). - Нажмите
Закрыть и загрузить. - 🔄 Автоматическое обновление при изменении исходных данных.
- 📊 Возможность добавлять дополнительные столбцы (например, категорию возраста:"18-25","26-40").
- 🚀 Обработка миллионов строк без тормозов.
Преимущества Power Query:
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте возраста. Вот самые распространённые:
| Ошибка | Причина | Решение |
|---|---|---|
| Возраст на вчерашний день | Файл не открывался сегодня, СЕГОДНЯ не обновилась |
Используйте ТДАТА + принудительный пересчёт (F9) |
| Отрицательное значение | Дата рождения в будущем или неверный формат ячейки | Проверьте формат (Дата) и корректность данных |
| Неточный расчёт месяцев | Деление на 30 вместо использования РАЗНДАТ("YM") |
Замените на =РАЗНДАТ(A2; СЕГОДНЯ;"YM") |
| Ошибка #ИМЯ? | Опечатка в названии функции (например, РАЗНДАТА вместо РАЗНДАТ) |
Проверьте синтаксис и локаль Excel |
Ещё одна частая проблема — кэширование дат. Если вы копируете формулу с СЕГОДНЯ как значение (например, через Специальная вставка → Значения), она перестанет обновляться. Чтобы этого избежать:
- Не конвертируйте формулы в значения без необходимости.
- Используйте
Power Queryдля динамических данных. - Для статических отчётов фиксируйте дату расчёта в отдельной ячейке (например,
=СЕГОДНЯв ячейкеB1, а в формулах ссылайтесь наB1вместоСЕГОДНЯ).
7. Примеры для специфических задач
Расчёт возраста может потребоваться в разных контекстах. Вот готовые решения дляных сценариев:
7.1. Возраст на конкретную дату (не сегодня)
Если нужно узнать, сколько человеку было лет на определённую дату (например, на 01.01.2023), замените СЕГОДНЯ на фиксированную дату:
=РАЗНДАТ(A2; ДАТА(2023;1;1);"Y")
7.2. Возрастная категория (например,"до 18","18-30")
Используйте функцию ЕСЛИ с вложенными условиями:
=ЕСЛИ(РАЗНДАТ(A2; СЕГОДНЯ;"Y")<18;"До 18";
ЕСЛИ(РАЗНДАТ(A2; СЕГОДНЯ;"Y")<30;"18-30";
ЕСЛИ(РАЗНДАТ(A2; СЕГОДНЯ;"Y")<50;"30-50";"Старше 50")))
7.3. Возраст в годах с десятичной частью (например, 25.5 лет)
Для аналитических задач иногда нужны дробные значения. Используйте:
=РАЗНДАТ(A2; СЕГОДНЯ;"Y") + РАЗНДАТ(A2; СЕГОДНЯ;"YM")/12
7.4. Возраст для нескольких дат одновременно
Если у вас столбец с датами рождения (например, A2:A100), протяните формулу вниз:
- Введите формулу в первую ячейку (например,
B2):=РАЗНДАТ(A2; $C$1;"Y"), гдеC1— ячейка с текущей датой (=СЕГОДНЯ). - Дважды кликните на маркер автозаполнения (маленький квадрат в правом нижнем углу
B2).
Как рассчитать возраст для даты в формате текста?
Если дата рождения хранится как текст (например,"15.05.1990"), сначала преобразуйте её в дату с помощью:
=ДАТАЗНАЧ(A2)
Затем используйте эту ячейку в формулах расчёта возраста. Если ДАТАЗНАЧ возвращает ошибку, проверьте формат текста (должен быть"ДД.ММ.ГГГГ" или аналогичный).
FAQ: Ответы на частые вопросы
Почему формула показывает возраст на вчерашний день?
Функция СЕГОДНЯ обновляется только при открытии файла или принудительном пересчёте (F9). Если вы сохранили файл вчера и открыли сегодня, дата не обновится автоматически. Решения:
- Нажмите
F9для пересчёта. - Используйте
Power Queryдля динамического обновления. - Для критических задач настройте макрос на автоматическое обновление при открытии файла.
Как посчитать возраст в Google Таблицах?
В Google Sheets используйте те же формулы, но с английскими названиями:
=DATEDIF(A2; TODAY;"Y")— полные годы.=INT((TODAY-A2)/365.25)— приблизительный возраст с учётом високосных лет.
Обратите внимание: в Google Таблицах функция TODAY обновляется при каждом изменении файла, а не только при открытии.
Можно ли рассчитать возраст без учёта месяца и дня (только полные годы)?
Да, для этого подходит функция РАЗНДАТ с параметром "Y":
=РАЗНДАТ(A2; СЕГОДНЯ;"Y")
Она вернёт количество полных лет, игнорируя месяцы и дни. Например, если сегодня 10.06.2026, а дата рождения 15.06.2000, результат будет 23 года (несмотря на то, что до дня рождения осталось 5 дней).
Как сделать так, чтобы возраст обновлялся каждый час?
Стандартные функции СЕГОДНЯ и ТДАТА не обновляются чаще, чем раз в сутки при открытии файла. Для часовых обновлений:
- Создайте макрос на VBA:
Sub UpdateAgeApplication.OnTime Now + TimeValue("01:00:00"),"UpdateAge"
Range("B2:B100").Calculate
End Sub
- Запустите его один раз — он будет срабатывать каждый час.
⚠️ Внимание: макрос работает только при открытом файле Excel.
Что делать, если дата рождения в формате"1990 год, май, 15"?
Если дата разбита на отдельные ячейки (год, месяц, день), используйте функцию ДАТА для сборки:
=РАЗНДАТ(ДАТА(B2; C2; D2); СЕГОДНЯ;"Y")
Где:
B2— ячейка с годом (например, 1990),C2— месяц (5 для мая),D2— день (15).