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

Расчёт возраста в Microsoft Excel или Google Таблицах — одна из самых востребованных задач при работе с персональными данными, кадровым учётом или аналитикой. Казалось бы, что может быть проще: вычесть дату рождения из текущей даты. Но на практике пользователи сталкиваются с ошибками вроде некорректного учёта високосных годов, отрицательных значений или «сбившихся» формул при обновлении файла. Эта статья поможет разобраться, как точно посчитать возраст на сегодняшний день с учётом всех нюансов, включая автоматическое обновление результата при открытии файла.

Мы рассмотрим 5 рабочих методов — от стандартной функции РАЗНДАТ (или DATEDIF в английской версии) до комбинаций с ТДАТА, СЕГОДНЯ и даже Power Query для обработки больших массивов данных. Особое внимание уделим типичным ошибкам: почему формула может показывать возраст на вчерашний день или как избежать проблем с форматом ячеек. В конце статьи вы найдёте FAQ с ответами на частые вопросы и таблицу сравнения методов по точности и удобству.

1. Базовый метод: функция РАЗНДАТ (DATEDIF) для точного расчёта

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

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

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

Где единица_измерения может принимать следующие значения:

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

Чтобы посчитать возраст на текущую дату, используйте комбинацию с функцией СЕГОДНЯ:

=РАЗНДАТ(A2; СЕГОДНЯ;"Y")

Где A2 — ячейка с датой рождения. Эта формула вернёт количество полных лет на сегодняшний день.

⚠️ Внимание: Если дата рождения в будущем (например, опечатка в году), функция вернёт ошибку #ЧИСЛО!. Проверьте формат ячейки с датой — он должен быть Дата, а не Текст.

Формат ячейки с датой рождения —"Дата"|Дата рождения не в будущем|Функция СЕГОДНЯ обновляется автоматически|Ячейка результата имеет общий формат

-->

2. Альтернатива: комбинация ГОД, МЕСЯЦ и ДЕНЬ для гибкости

Если функция РАЗНДАТ по какой-то причине недоступна (например, в некоторых локализациях Excel), можно использовать альтернативный подход с функциями ГОД, МЕСЯЦ и ДЕНЬ. Этот метод даёт больше контроля над расчётом и позволяет учитывать неполные годы.

Формула для расчёта полных лет:

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

Разберём логику:

  1. Вычисляем разницу лет между текущей датой и датой рождения.
  2. Проверяем, прошёл ли день рождения в этом году:
    • Если текущий месяц меньше месяца рождения — вычитаем 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 и новее.

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

  1. Выделите таблицу с датами рождения и перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте столбец с формулой:
    = Date.From(DateTime.LocalNow) - [Дата рождения]

    Где [Дата рождения] — название вашего столбца.

  3. Преобразуйте результат в годы, разделив на 365.25 (или используйте Duration.Days для точного количества дней).
  4. Нажмите Закрыть и загрузить.
  5. Преимущества Power Query:

    • 🔄 Автоматическое обновление при изменении исходных данных.
    • 📊 Возможность добавлять дополнительные столбцы (например, категорию возраста:"18-25","26-40").
    • 🚀 Обработка миллионов строк без тормозов.

6. Типичные ошибки и как их избежать

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

Ошибка Причина Решение
Возраст на вчерашний день Файл не открывался сегодня, СЕГОДНЯ не обновилась Используйте ТДАТА + принудительный пересчёт (F9)
Отрицательное значение Дата рождения в будущем или неверный формат ячейки Проверьте формат (Дата) и корректность данных
Неточный расчёт месяцев Деление на 30 вместо использования РАЗНДАТ("YM") Замените на =РАЗНДАТ(A2; СЕГОДНЯ;"YM")
Ошибка #ИМЯ? Опечатка в названии функции (например, РАЗНДАТА вместо РАЗНДАТ) Проверьте синтаксис и локаль Excel

Ещё одна частая проблема — кэширование дат. Если вы копируете формулу с СЕГОДНЯ как значение (например, через Специальная вставка → Значения), она перестанет обновляться. Чтобы этого избежать:

  1. Не конвертируйте формулы в значения без необходимости.
  2. Используйте Power Query для динамических данных.
  3. Для статических отчётов фиксируйте дату расчёта в отдельной ячейке (например, =СЕГОДНЯ в ячейке 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), протяните формулу вниз:

  1. Введите формулу в первую ячейку (например, B2): =РАЗНДАТ(A2; $C$1;"Y"), где C1 — ячейка с текущей датой (=СЕГОДНЯ).
  2. Дважды кликните на маркер автозаполнения (маленький квадрат в правом нижнем углу 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 дней).

Как сделать так, чтобы возраст обновлялся каждый час?

Стандартные функции СЕГОДНЯ и ТДАТА не обновляются чаще, чем раз в сутки при открытии файла. Для часовых обновлений:

  1. Создайте макрос на VBA:
    Sub UpdateAge
    

    Application.OnTime Now + TimeValue("01:00:00"),"UpdateAge"

    Range("B2:B100").Calculate

    End Sub

  2. Запустите его один раз — он будет срабатывать каждый час.

⚠️ Внимание: макрос работает только при открытом файле Excel.

Что делать, если дата рождения в формате"1990 год, май, 15"?

Если дата разбита на отдельные ячейки (год, месяц, день), используйте функцию ДАТА для сборки:

=РАЗНДАТ(ДАТА(B2; C2; D2); СЕГОДНЯ;"Y")

Где:

  • B2 — ячейка с годом (например, 1990),
  • C2 — месяц (5 для мая),
  • D2 — день (15).