Как посчитать сколько лет между датами в Excel: 5 рабочих методов с примерами

Если при вычитании даты рождения из текущей даты в Excel вы получаете некорректное количество лет (например, 45.28 вместо 45), проблема в автоматическом формате ячеек. Программа воспринимает разницу как дни, а не как полные годы. Чтобы точно посчитать возраст, стаж или интервал в годах, нужны специализированные функции — от простой ГОД() до универсальной ДАТАРАЗН(), которая учитывает календарные нюансы (включая 29 февраля).

Ошибки возникают даже при корректных данных: например, формула =ГОД(СЕГОДНЯ())-ГОД(A1) даст сбой, если день рождения еще не наступил в текущем году. В этой статье — 5 проверенных методов с учетом edge-cases, включая расчет стажа по трудовой книжке и обработку отрицательных значений. Все примеры адаптированы для Excel 2010–2023 и Excel Online.

Почему простая разность дат не работает

При попытке вычесть одну дату из другой (=B1-A1) Excel возвращает количество дней между ними, а не годы. Например, разница между 01.01.2000 и 01.01.2023 составит 8395 дней. Если применить формат ячейки "Общий", результат отобразится как 23.0 (23 года), но это совпадение: на самом деле программа делит дни на 365, игнорируя високосные годы.

Ключевые проблемы метода:

  • 🔴 Неточность: 365 ≠ реальному количеству дней в году (високосные годы имеют 366 дней).
  • 🔴 Округление: Формат "Дата" преобразует результат в дату (например, 23.023.01.1900).
  • 🔴 Отрицательные значения: Если дата начала позже конечной, формула вернет ошибку #ЧИСЛО!.
⚠️ Внимание: Никогда не используйте формат ячейки "Дата" для отображения разницы в годах. Это исказит результат, преобразовав его в несуществующую дату (например, 45 лет станет 45.01.1900).

Метод 1: Функция ГОД() для целых лет

Самый простой способ посчитать полные годы между двумя датами — вычесть годы друг из друга:

=ГОД(B1)-ГОД(A1)

Где A1 — начальная дата (например, дата рождения), B1 — конечная (например, СЕГОДНЯ()).

Пример: для дат 15.03.1980 и 10.05.2023 формула вернет 43. Однако этот метод не учитывает месяц и день: если на момент расчета день рождения еще не наступил, результат будет завышен на 1 год.

Сравните месяц и день начальной даты с текущими|Если текущая дата РАНЬШЕ дня рождения, вычтите 1 из результата|Используйте условную функцию ЕСЛИ для автоматической корректировки|Проверьте формат ячеек (должен быть "Общий" или "Числовой")

-->

Исправленный вариант с учетом месяца и дня:

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

Метод 2: ДАТАРАЗН() — универсальное решение

Функция ДАТАРАЗН() (англ. DATEDIF) специально разработана для расчета разницы между датами в годах, месяцах или днях. Синтаксис:

=ДАТАРАЗН(начальная_дата; конечная_дата; "Y")

Где "Y" — код для вычисления полных лет. Преимущества метода:

  • ✅ Учитывает високосные годы и 29 февраля.
  • ✅ Автоматически корректирует результат, если день рождения еще не наступил.
  • ✅ Работает с отрицательными интервалами (возвращает #ЧИСЛО!, если начальная дата позже конечной).

Пример: для дат 29.02.2000 и 01.03.2023 формула вернет 23, хотя фактическая разница — 23 года и 1 день. Чтобы включить неполный год, используйте код "YM" (месяцы с избытком) или "MD" (дни с избытком).

Особенности ДАТАРАЗН с 29 февраля

Если конечная дата — 28.02 или 01.03 високосного года, функция посчитает 29.02 как полный день. Например, разница между 29.02.2020 и 28.02.2023 составит 3 года, хотя фактически прошло 2 года и 364 дня.

КодЗначениеПример результата
"Y"Полные годы23 (для 01.01.2000–01.01.2023)
"M"Полные месяцы276
"D"Дни8395
"YM"Месяцы с избытком0 (если разница < 12 мес.)
"MD"Дни с избытком0 (если разница < 31 дня)

Метод 3: RYEARFRAC() для дробных лет

Если нужно посчитать годы с точностью до десятых или сотых (например, для финансовых расчетов), используйте RYEARFRAC():

=RYEARFRAC(A1; B1; 1)

Параметры:

  • A1 — начальная дата.
  • B1 — конечная дата.
  • 1 — метод расчета (рекомендуемый для точных вычислений).

Пример: для интервала 01.01.202015.06.2023 функция вернет 3.45 (3 года и ~5.5 месяцев). Чтобы отобразить результат в годах и месяцах, комбинируйте с ЦЕЛОЕ() и ОСТАТ():

=ЦЕЛОЕ(RYEARFRAC(A1; B1; 1)) & " лет " & ОКРУГЛ(ОСТАТ(RYEARFRAC(A1; B1; 1); 1)*12; 0) & " мес."
⚠️ Внимание: RYEARFRAC() может давать незначительные расхождения с календарным методом из-за внутренней логики Excel. Для юридических документов (например, расчета стажа) используйте ДАТАРАЗН().

Метод 4: Расчет возраста с учетом текущей даты

Чтобы динамически считать возраст по дате рождения, комбинируйте СЕГОДНЯ() с ДАТАРАЗН():

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

Где A1 — ячейка с датой рождения. Формула будет автоматически обновляться при каждом открытии файла.

Для вывода возраста в формате "X лет, Y месяцев, Z дней" используйте:

=ДАТАРАЗН(A1; СЕГОДНЯ(); "Y") & " лет, " & ДАТАРАЗН(A1; СЕГОДНЯ(); "YM") & " мес., " & ДАТАРАЗН(A1; СЕГОДНЯ(); "MD") & " дн."

Целые годы (например, 25)|Годы и месяцы (например, 25 лет 3 мес.)|Точные годы с десятыми (например, 25.3)|Годы, месяцы и дни (например, 25 лет 3 мес. 15 дн.)

-->

Пример для трудовой книжки: если дата приема на работу — 10.11.2010, а текущая дата — 15.06.2023, формула вернет 12 лет, 7 мес., 5 дн..

Метод 5: Обработка ошибок и особенные случаи

При работе с датами в Excel возникают типичные ошибки:

  • 🔴 #ЗНАЧ!: Ячейка содержит текст вместо даты. Проверьте формат (Ctrl+1 → категория "Дата").
  • 🔴 #ЧИСЛО!: Начальная дата позже конечной. Используйте ЕСЛИОШИБКА():
=ЕСЛИОШИБКА(ДАТАРАЗН(A1; B1; "Y"); "Дата начала позже конечной")

Для обработки 29 февраля в невисокосные годы используйте замену на 28.02 или 01.03:

=ЕСЛИ(ДЕНЬ(A1)=29; ЕСЛИ(МЕСЯЦ(A1)=2; ЕСЛИ(ГОД(B1)-ГОД(A1)=4; A1; ДАТА(ГОД(A1); 3; 1)); A1); A1)

-->

Практическое применение: стаж, возраст, интервалы

Расчет количества лет востребован в разных сценариях:

ЗадачаФормулаПример
Возраст по дате рождения=ДАТАРАЗН(A1; СЕГОДНЯ(); "Y")30 (для 15.05.1993)
Стаж работы=ДАТАРАЗН(B2; C2; "Y") & " лет " & ДАТАРАЗН(B2; C2; "YM") & " мес."5 лет 8 мес.
Срок службы оборудования=RYEARFRAC(B3; C3; 1)3.75 (лет)
Интервал между событиями=ГОД(C4)-ГОД(B4)10 (для 2010–2020)

Для массового расчета (например, возраста всех сотрудников в таблице) протяните формулу вниз, зафиксировав столбцы:

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

-->

FAQ: Частые вопросы

Почему формула =ГОД(СЕГОДНЯ())-ГОД(A1) дает неверный результат?

Формула не учитывает, наступил ли день рождения в текущем году. Например, если сегодня 10.05.2023, а дата рождения — 15.06.1990, результат будет 33, хотя фактически человеку еще 32. Используйте ДАТАРАЗН() или добавьте корректировку через ЕСЛИ().

Как посчитать годы между датами в Google Sheets?

В Google Таблицах доступны те же функции: =DATEDIF(A1; B1; "Y") или =YEARFRAC(A1; B1; 1). Синтаксис идентичен Excel, но учитывайте, что в Google Sheets нет функции RYEARFRAC() — используйте YEARFRAC().

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

Да, но для этого потребуется комбинация функций ЧИСТРАБДНИ() и деления на среднее количество рабочих дней в году (~260). Пример:

=ЧИСТРАБДНИ(A1; B1)/260

Результат будет приблизительным, так как количество рабочих дней варьируется по годам.

Как отобразить результат в формате "25 лет 3 месяца"?

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

=ДАТАРАЗН(A1; B1; "Y") & " лет " & ДАТАРАЗН(A1; B1; "YM") & " мес."

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

=ДАТАРАЗН(A1; B1; "Y") & " " & ВЫБОР(МОД(ДАТАРАЗН(A1; B1; "Y"); 100); "год"; "года"; "года"; "года"; "лет"; "лет"; "лет"; "лет"; "лет")
Почему ДАТАРАЗН возвращает #ИМЯ?

Ошибка #ИМЯ? означает, что Excel не распознает имя функции. Причины:

  • Опечатка в названии (правильно: ДАТАРАЗН, а не ДАТРАЗН).
  • Локаль программы не русская (попробуйте английскую версию DATEDIF).
  • Отсутствует поддержка в вашей версии Excel (доступна с 2007 года).