Расчёт возраста по дате рождения — одна из самых востребованных задач в Microsoft Excel, особенно при работе с кадровыми базами, медицинскими картами или учебными журналами. Казалось бы, что может быть проще: вычесть дату рождения из текущей даты? Но на практике пользователи сталкиваются с ошибками: Excel может округлять значения, игнорировать месяцы или дни, а иногда и вовсе выдавать отрицательные числа. Почему так происходит?
Дело в том, что Excel оперирует датами как числовыми значениями (где 1 — это 1 января 1900 года), а стандартное вычитание не учитывает логику "полных лет". Например, если сегодня 15.05.2026, а дата рождения — 20.12.2000, то простая формула =ТДАТА()-A1 вернёт 23,4 (года), хотя полных лет ещё только 23. В этой статье разберём 5 надёжных способов посчитать возраст корректно — от базовых функций до продвинутых формул с учётом високосных годов.
Особое внимание уделим типичным ошибкам: почему формула =ГОД(ТДАТА())-ГОД(A1) даёт сбой при датах рождения в декабре-январе, как избежать проблемы с #ЗНАЧ! при пустых ячейках, и почему в некоторых случаях лучше использовать Power Query вместо формул. Также покажем, как автоматизировать расчёт для тысяч строк данных — без ручного ввода текущей даты.
Если вы работаете с большими таблицами, где даты рождения хранятся в формате ДД.ММ.ГГГГ или ГГГГ-ММ-ДД, важно предварительно проверить их корректность. Например, дата 30.02.2020 не существует, но Excel может её "принять" и исказить итоговый расчёт. Мы научим вас проверять такие ошибки заранее.
1. Базовый способ: функция РАЗНДАТ (DATEDIF)
Функция РАЗНДАТ (или DATEDIF в английской версии) — самый популярный инструмент для расчёта разницы между датами. Она скрыта в списке функций Excel, но работает во всех версиях программы, включая Excel 365 и Excel 2019. Главное преимущество: позволяет учитывать только полные годы, игнорируя месяцы и дни.
Синтаксис функции:
РАЗНДАТ(дата_начала; дата_конца; единица_измерения)
где единица_измерения может принимать значения:
- 📅
"Y"— полные годы (игнорирует месяцы и дни) - 📆
"M"— полные месяцы - ⏳
"D"— полные дни
Пример для расчёта возраста:
=РАЗНДАТ(A2; ТДАТА(); "Y")
где A2 — ячейка с датой рождения, а ТДАТА() возвращает текущую дату.
⚠️ Внимание: Если дата рождения позже текущей даты (например, опечатка в году), функция вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, оберните формулу в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(РАЗНДАТ(A2; ТДАТА(); "Y"); "Ошибка даты")
2. Альтернативный метод: комбинация ГОД и ЕСЛИ
Если РАЗНДАТ по какой-то причине недоступна (например, в некоторых локализациях Excel для Mac), используйте формулу на основе функций ГОД, МЕСЯЦ и ДЕНЬ. Она учитывает, прошёл ли день рождения в текущем году:
=ГОД(ТДАТА())-ГОД(A2)-ЕСЛИ(ИЛИ(МЕСЯЦ(ТДАТА())<МЕСЯЦ(A2); И(МЕСЯЦ(ТДАТА())=МЕСЯЦ(A2); ДЕНЬ(ТДАТА())<ДЕНЬ(A2))); 1; 0)
Разберём логику:
- Сначала вычисляем разницу лет:
ГОД(ТДАТА()) - ГОД(A2). - Затем проверяем, прошёл ли день рождения в текущем году:
- Если текущий месяц меньше месяца рождения ИЛИ
- Текущий месяц равен месяцу рождения, но день меньше дня рождения,
1 (потому что полных лет ещё не исполнилось).⚠️ Внимание: Эта формула чувствительна к формату ячеек. Если дата рождения введена как текст (например, '15.05.2000), Excel вернёт ошибку. Чтобы исправить, выделите столбец с датами и выберите формат Дата в меню Главная → Формат ячеек.
3. Учёт високосных годов и точный расчёт дней
Если вам нужно не только количество полных лет, но и точный возраст в годах, месяцах и днях (например, 25 лет, 3 месяца, 10 дней), используйте расширенный вариант РАЗНДАТ:
=РАЗНДАТ(A2; ТДАТА(); "Y") & " лет, " & РАЗНДАТ(A2; ТДАТА(); "YM") & " мес., " & РАЗНДАТ(A2; ТДАТА(); "MD") & " дн."
Здесь:
- 📌
"Y"— полные годы. - 📌
"YM"— месяцы с учётом полных лет (т.е. остаток после вычитания лет). - 📌
"MD"— дни с учётом полных лет и месяцев.
Важно: Формат "YD" (дни без учёта месяцев) в РАЗНДАТ работает некорректно — используйте только "MD" для точного расчёта дней.
Для проверки високосных годов (например, если дата рождения — 29 февраля) добавьте условие:
=ЕСЛИ(И(ДЕНЬ(A2)=29; МЕСЯЦ(A2)=2); "Високосный год!"; РАЗНДАТ(A2; ТДАТА(); "Y"))
Почему 29 февраля — проблема для Excel?
Excel хранит даты как последовательные числа, где 1 января 1900 года = 1. При этом 1900 год ошибочно считается високосным (хотя на самом деле нет), что может искажать расчёты для дат до 1 марта 1900. Для современных дат это не критично, но важно помнить при работе с историческими данными.
4. Автоматизация для больших таблиц: Power Query
Если у вас тысячи строк с датами рождения (например, база сотрудников или пациентов), ручной ввод формул неэффективен. В этом случае используйте Power Query — инструмент для преобразования данных, встроенный в Excel 2016+ и Excel 365.
Алгоритм действий:
- Выделите таблицу с датами и нажмите
Данные → Из таблицы/диапазона(в Excel 2016) илиДанные → Получить данные → Из таблицы/диапазона(в Excel 365). - В открывшемся редакторе Power Query добавьте новый столбец:
Добавить столбец → Пользовательский столбец. - Введите формулу:
Date.From(DateTime.LocalNow()) - [Дата рождения]где
[Дата рождения]— название вашего столбца. - Затем создайте ещё один столбец для расчёта полных лет:
Number.IntegerDivide(Date.Year(DateTime.LocalNow()) - Date.Year([Дата рождения]), 1) - (DateTime.LocalNow() < DateTime.From([Дата рождения]).AddYears(Date.Year(DateTime.LocalNow()) - Date.Year([Дата рождения])) ? 1 : 0) - Нажмите
Главная → Закрыть и загрузить.
⚠️ Внимание: В Power Query даты указываются в формате ГГГГ-ММ-ДД. Если ваш источник использует другой формат (например, ДД.ММ.ГГГГ), предварительно преобразуйте его с помощью функции Date.FromText.
Убедиться, что даты в формате ДД.ММ.ГГГГ или ГГГГ-ММ-ДД|
Проверить отсутствие текста в ячейках (например, "ок. 1990")|
Удалить пустые строки|
Сохранить исходную таблицу (на случай ошибок)-->
5. Расчёт возраста на конкретную дату (не текущую)
Часто требуется узнать возраст не на сегодня, а на определённую дату — например, на момент трудоустройства или медицинского осмотра. Для этого замените ТДАТА() на фиксированную дату в формате ДАТА(год; месяц; день).
Пример: возраст на 01.01.2023:
=РАЗНДАТ(A2; ДАТА(2023; 1; 1); "Y")
Если дата указана в отдельной ячейке (например, B2), используйте:
=РАЗНДАТ(A2; B2; "Y")
Для массового расчёта (например, возраст всех сотрудников на дату приёма на работу) создайте дополнительный столбец с датами и протяните формулу вниз.
| Дата рождения | Дата события | Формула | Возраст (полных лет) |
|---|---|---|---|
| 15.05.1990 | 01.06.2020 | =РАЗНДАТ(A2; B2; "Y") |
29 |
| 20.12.1985 | 10.01.2021 | =РАЗНДАТ(A3; B3; "Y") |
35 |
| 01.01.2000 | 01.01.2020 | =РАЗНДАТ(A4; B4; "Y") |
20 |
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте возраста. Вот самые распространённые из них и способы решения:
- 🔴 Ошибка #ЗНАЧ!: Возникает, если ячейка с датой рождения пустая или содержит текст. Решение: используйте
ЕСЛИОШИБКАили проверкуЕПУСТО:=ЕСЛИ(ЕПУСТО(A2); ""; РАЗНДАТ(A2; ТДАТА(); "Y")) - 🔴 Неправильный формат даты: Excel может воспринимать
12.03.2000как3 декабря(если в настройках системы форматММ.ДД.ГГГГ). Решение: проверьте региональные настройки вФайл → Параметры → Язык. - 🔴 Округление до ближайшего года: Формула
=ЦЕЛОЕ((ТДАТА()-A2)/365)даёт приблизительный результат, так как не учитывает високосные годы. Используйте толькоРАЗНДАТили комбинациюГОД/МЕСЯЦ/ДЕНЬ.
⚠️ Внимание: Если вы импортируете даты из внешних источников (например, 1С или SQL), они могут отображаться как числа (например, 44197 вместо 01.01.2021). Чтобы преобразовать, используйте формулу:
=ДАТА(1900; 1; A2)
где A2 — ячейка с числовым значением даты.
7. Продвинутые сценарии: возраст в годах с десятичными и условное форматирование
Иногда требуется не только целое число лет, но и десятичная часть (например, 25,5 лет для отчётности). Для этого используйте:
=РАЗНДАТ(A2; ТДАТА(); "Y") + (РАЗНДАТ(A2; ТДАТА(); "YM") + РАЗНДАТ(A2; ТДАТА(); "MD")/30)/12
Эта формула учитывает, что в среднем в месяце 30 дней (упрощённо).
Для визуального выделения несовершеннолетних (возраст < 18) или пенсионеров (возраст ≥ 65) настройте условное форматирование:
- Выделите столбец с возрастом.
- Перейдите в
Главная → Условное форматирование → Создать правило. - Выберите
Форматировать только ячейки, которые содержат. - Установите условие:
Значение меньше 18и выберите красный цвет заливки. - Добавьте второе правило для значения
больше или равно 65с синим цветом.
Пример настройки:
| Возраст | Форматирование | Причина |
|---|---|---|
| 17 | Красный фон | Несовершеннолетний |
| 25 | Без форматирования | Трудоспособный возраст |
| 66 | Синий фон | Пенсионный возраст |
FAQ: Частые вопросы по расчёту возраста в Excel
❓ Почему формула =ГОД(ТДАТА())-ГОД(A1) даёт неверный результат для декабря?
Эта формула не учитывает, прошёл ли день рождения в текущем году. Например, если сегодня 01.01.2026, а дата рождения — 31.12.2000, то по формуле получится 24 года, хотя на самом деле ещё только 23. Используйте РАЗНДАТ или расширенную формулу с ЕСЛИ.
❓ Как посчитать возраст в Excel Online или Google Sheets?
В Excel Online и Google Sheets функция РАЗНДАТ также работает, но может требовать ручного ввода (не отображается в мастере функций). В Google Sheets альтернатива — формула:
=INT(YEAR(TODAY())-YEAR(A1)-IF(OR(MONTH(TODAY())
❓ Можно ли рассчитать возраст с учётом времени (часов и минут)?
Да, но для этого нужно использовать функции СЕГОДНЯ() и ВРЕМЯ(). Например, для расчёта возраста в часах:
=(СЕГОДНЯ()+ВРЕМЯ(ЧАС(СЕЙЧАС()); МИНУТЫ(СЕЙЧАС()); СЕКУНДЫ(СЕЙЧАС())) - A1)*24
Однако для большинства задач достаточно расчёта в годах.
❓ Как автоматически обновлять возраст при открытии файла?
Функции ТДАТА() и СЕЙЧАС() пересчитываются автоматически при каждом открытии файла или изменении данных. Если этого не происходит, проверьте настройки:
- Перейдите в
Формулы → Параметры вычислений. - Выберите
Автоматически(неВручную).
❓ Почему Excel показывает дату как ######?
Это означает, что ширина столбца недостаточна для отображения даты. Растяните столбец или измените формат ячейки на Дата через Главная → Формат → Формат ячеек. Также проверьте, не является ли значение отрицательным (например, если дата рождения в будущем).