Как в Excel поменять дату рождения на возраст: формулы, функции и лайфхаки

Почему простой вычитание дат не работает (и что делать вместо этого)

Вы когда-нибудь пытались в Microsoft Excel просто вычесть дату рождения из текущей даты, чтобы получить возраст? Если да, то наверняка сталкивались с тем, что результат выходит в формате 45.678 вместо привычных 45 лет. Это происходит потому, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), а не как календарные значения. Чтобы получить корректный возраст в годах, месяцах или днях, нужны специальные формулы.

В этой статье мы разберём 5 рабочих способов преобразования даты рождения в возраст — от простейших функций до автоматизированных решений с учётом текущей даты. Вы узнаете, как:

  • 🔹 Использовать функцию ДАТАРАЗН для точного расчёта с учётом месяцев и дней
  • 🔹 Применять ГОДСЕГОДНЯ и ДАТА для динамического обновления возраста
  • 🔹 Автоматизировать процесс с помощью Power Query (для больших таблиц)
  • 🔹 Избежать ошибок при работе с високосными годами и неполными месяцами

Все методы протестированы в Excel 2010–2026 (включая Microsoft 365) и работают как на Windows, так и на macOS. Если вы работаете с Google Sheets, majority формул также применимы с минимальными правками.

📊 Как часто вам нужно рассчитывать возраст в Excel?
Ежедневно
Раз в неделю
Редко
Никогда

Способ 1: Функция ДАТАРАЗН — самый точный метод

Функция ДАТАРАЗН (или DATEDIF в английской версии) специально создана для вычисления разницы между двумя датами в годах, месяцах или днях. Её главный плюс — учёта неполных периодов. Например, если человек родился 15 марта, а сегодня 10 марта, функция правильно покажет, что полных лет ещё не исполнилось.

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

=ДАТАРАЗН(дата_рождения; сегодня; "Y")

Где:

  • 📅 дата_рождения — ячейка с датой (например, A2)
  • 📅 сегодня — текущая дата (можно использовать СЕГОДНЯ())
  • 🔤 "Y" — код для возврата полных лет (другие варианты: "M" — месяцы, "D" — дни)

Пример для ячейки B2:

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

Формат ячейки с датой рождения — "Дата" (не "Текст")|Текущая дата обновляется автоматически (используйте СЕГОДНЯ())|Для месяцев и дней используйте "YM" и "MD" соответственно|Проверьте региональные настройки (в некоторых версиях Excel функция скрыта)

-->

⚠️ Внимание: В Excel 2016 и новее функция ДАТАРАЗН может не отображаться в списке автозаполнения, но она работает! Введите её вручную.
Код Значение Пример результата
"Y" Полные годы 25 (если разница 25 лет и 3 месяца)
"M" Полные месяцы 305 (25 лет и 5 месяцев)
"D" Полные дни 9131 (25 лет)
"YM" Месяцы без учёта лет 5 (если разница 25 лет и 5 месяцев)
"MD" Дни без учёта месяцев и лет 15 (если разница 25 лет, 5 месяцев и 15 дней)

Способ 2: Комбинация ГОДСЕГОДНЯ и ДАТА — для динамического возраста

Если вам нужно, чтобы возраст автоматически обновлялся при открытии файла, используйте сочетание функций ГОДСЕГОДНЯ() (или YEAR(TODAY())) и ДАТА(). Этот метод проще, чем ДАТАРАЗН, но не учитывает месяцы и дни — только полные годы.

Формула:

=ГОД(СЕГОДНЯ()) - ГОД(A2)

Где A2 — ячейка с датой рождения. Однако у этого способа есть критическая ошибка: если день рождения ещё не наступил в текущем году, формула покажет завышенный возраст (например, 26 вместо 25). Чтобы исправить это, добавьте проверку:

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

Эта формула проверяет:

  1. Если текущий месяц меньше месяца рождения → вычитает 1 год
  2. Если месяцы равны, но день текущий меньше дня рождения → тоже вычитает 1 год
⚠️ Внимание: В Excel для Mac функция ДЕНЬ() может конфликтовать с форматом даты. Если получаете ошибку, используйте ДЕНЬМЕС(A2) вместо ДЕНЬ(A2).

Способ 3: Формула массива для возраста в годах, месяцах и днях

Если вам нужно вывести возраст в формате 25 лет, 3 месяца, 15 дней, используйте формулу массива. Она сложнее предыдущих, но даёт максимально детализированный результат.

Введите эту формулу в ячейку и завершите нажатием Ctrl+Shift+Enter (в новых версиях Excel просто Enter):

=ТЕКСТ(ЦЕЛОЕ((СЕГОДНЯ()-A2)/365);"0") & " лет, " & ТЕКСТ(ЦЕЛОЕ(ОСТАТ((СЕГОДНЯ()-A2);365)/30,44);"0") & " мес., " & ТЕКСТ(ОСТАТ(ОСТАТ(СЕГОДНЯ()-A2;365);30,44);"0") & " дн."

Разберём компоненты:

  • 🔢 (СЕГОДНЯ()-A2)/365 — разница в годах (приблизительно)
  • 🔢 ОСТАТ(...,365) — остаток дней после вычитания полных лет
  • 🔢 30,44 — среднее количество дней в месяце (учитывает високосные годы)
  • 📝 ТЕКСТ(..., "0") — преобразует числа в текст без десятичных знаков
Почему именно 30,44 дня в месяце?

Этот коэффициент учитывает, что в году 365.25 дней (с учётом високосных лет), а в среднем месяце — 365.25/12 ≈ 30.44 дня. Это точнее, чем просто делить на 30.

Для упрощения можно разбить формулу на отдельные ячейки:

Ячейка Формула Результат
B2 =ЦЕЛОЕ((СЕГОДНЯ()-A2)/365) 25 (лет)
C2 =ЦЕЛОЕ(ОСТАТ((СЕГОДНЯ()-A2);365)/30,44) 3 (месяца)
D2 =ОСТАТ(ОСТАТ(СЕГОДНЯ()-A2;365);30,44) 15 (дней)

Способ 4: Power Query для массовой обработки дат

Если у вас таблица с тысячами записей (например, база клиентов или сотрудников), ручной расчёт возраста займёт часы. В этом случае используйте Power Query — инструмент для автоматизации обработки данных.

Пошаговая инструкция:

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

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

  4. Нажмите OK, затем Закрыть и загрузить.

Результат: новый столбец с разницей в днях. Чтобы преобразовать его в годы, добавьте ещё один настраиваемый столбец с формулой:

= Number.RoundDown([Разница в днях]/365)

Преимущества метода:

  • ⚡ Обрабатывает миллионы строк за секунды
  • 🔄 Автоматически обновляет возраст при изменении исходных данных
  • 📊 Позволяет добавлять дополнительные вычисления (например, категоризацию по возрастным группам)

Способ 5: VBA-скрипт для автоматизации (для продвинутых пользователей)

Если вам нужно не только рассчитать возраст, но и автоматизировать другие действия (например, отправлять уведомления о днях рождения), используйте VBA (Visual Basic for Applications). Этот метод требует базовых знаний программирования, но даёт максимальную гибкость.

Пример скрипта для добавления столбца с возрастом:

Sub CalculateAge()

Dim ws As Worksheet

Dim lastRow As Long

Dim i As Long

Set ws = ActiveSheet

lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

' Добавляем заголовок столбца "Возраст"

ws.Range("B1").Value = "Возраст"

' Рассчитываем возраст для каждой строки

For i = 2 To lastRow

ws.Range("B" & i).Value = Application.WorksheetFunction.DatedIf(ws.Range("A" & i).Value, Date, "Y")

Next i

End Sub

Как использовать:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Запустите макрос кнопкой F5.
⚠️ Внимание: Перед запуском макроса сохраните файл в формате .xlsm (с поддержкой макросов), иначе скрипт не сработает. Также проверьте, что даты в столбце A имеют формат "Дата", а не "Текст".

Для расширенной функциональности (например, вывода возраста в формате 25 лет, 3 мес.) модифицируйте скрипт:

ws.Range("B" & i).Value = "Год(а): " & Application.WorksheetFunction.DatedIf(ws.Range("A" & i).Value, Date, "Y") & _

", Мес.: " & Application.WorksheetFunction.DatedIf(ws.Range("A" & i).Value, Date, "YM")

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

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

Ошибка Причина Решение
#ЗНАЧ! в ячейке с возрастом Ячейка с датой рождения пустая или содержит текст Проверьте данные функцией =ЕТЕКСТ(A2). Если возвращает ИСТИНА, исправьте формат ячейки на "Дата".
Возраст на 1 год больше реального Не учтён день рождения в текущем году Используйте формулу с проверкой (см. Способ 2) или ДАТАРАЗН.
Даты отображаются как числа (например, 44927) Ячейка имеет общий формат, а не "Дата" Выделите ячейку → Формат ячеек → выберите "Дата".
Функция ДАТАРАЗН не работает Опечатка в названии или региональные настройки Введите функцию вручную на английском: =DATEDIF(A2,TODAY(),"Y").
Возраст не обновляется при открытии файла Отключено автоматическое пересчёта формул Перейдите в Формулы → Параметры вычислений → Автоматически.

Ещё одна частая проблема — високосные годы. Например, если человек родился 29 февраля, а текущий год не високосный, Excel может неправильно рассчитать возраст. Чтобы избежать этого, используйте ДАТАРАЗН с кодом "Y" — она корректно обрабатывает такие случаи.

=ЕСЛИ(ИЛИ(ОСТАТ(ГОД(A2);400)=0; И(ОСТАТ(ГОД(A2);4)=0; ОСТАТ(ГОД(A2);100)<>0)); "Да"; "Нет")

-->

FAQ: Ответы на частые вопросы

Можно ли рассчитать возраст без учёта текущей даты (например, на конкретную дату в прошлом)?

Да! Замените СЕГОДНЯ() на фиксированную дату в формате ДАТА(год;месяц;день). Например, для расчёта возраста на 31 декабря 2023 года:

=ДАТАРАЗН(A2; ДАТА(2023;12;31); "Y")
Как посчитать возраст в Excel Online или Google Sheets?

В Excel Online и Google Sheets работают те же формулы, но:

  • 🔹 В Google Sheets функция ДАТАРАЗН называется =DATEDIF (английская версия).
  • 🔹 Для текущей даты используйте =TODAY() (вместо СЕГОДНЯ()).
  • 🔹 Формулы массива в Google Sheets не требуют Ctrl+Shift+Enter.
Как вывести возраст в формате "25 лет и 3 месяца" без дней?

Используйте комбинацию ДАТАРАЗН с конкатенацией:

=ДАТАРАЗН(A2; СЕГОДНЯ(); "Y") & " лет и " & ДАТАРАЗН(A2; СЕГОДНЯ(); "YM") & " мес."

Для корректного склонения ("год", "года", "лет") добавьте функцию ВЫБОР:

=ДАТАРАЗН(A2; СЕГОДНЯ(); "Y") & " " & ВЫБОР(ДАТАРАЗН(A2; СЕГОДНЯ(); "Y") MOD 100; "год"; ВЫБОР(ДАТАРАЗН(A2; СЕГОДНЯ(); "Y") MOD 10; 1; "год"; 2; "года"; 3; "года"; 4; "года"; "лет"); "лет")
Как рассчитать возраст для даты рождения в формате "дд.мм.гггг" (текст)?

Если дата хранится как текст (например, "15.05.1990"), сначала преобразуйте её в формат "Дата" с помощью:

=ДАТАЗНАЧ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2;".";"/"); " "; ""))

Затем используйте полученное значение в формулах для расчёта возраста.

Можно ли автоматически обновлять возраст в Excel при изменении даты в другой ячейке?

Да! Если текущая дата хранится не в СЕГОДНЯ(), а в отдельной ячейке (например, C1), все формулы будут пересчитываться при её изменении. Например:

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

Это полезно для моделирования ситуаций (например, "каким будет возраст через 5 лет").