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

Если вам нужно вычислить разницу в годах между двумя датами в Microsoft Excel или Google Таблицах, стандартное вычитание (`=B1-A1`) вернет количество дней, а не лет. Чтобы получить именно годы — с учетом или без учета полных месяцев и дней — требуются специальные функции. Например, формула =DATEDIF(A1; B1; "Y") вернет полные годы между датами в ячейках A1 и B1, но игнорирует месяцы и дни. Если же важно учитывать, достиг ли человек возраста 18 лет на конкретную дату (например, 17.05.2026 при рождении 18.05.2006), этот метод даст неверный результат.

Проблема усложняется, когда нужно рассчитать стаж работы, возраст клиента или срок действия договора с точностью до дня. В таких случаях стандартная DATEDIF может как завышать, так и занижать результат. Например, разница между 31.12.2020 и 01.01.2021 составит 0 полных лет по "Y", но 1 год по логике "календарных лет". В этой статье разберем 5 рабочих способов — от базовых до продвинутых — с примерами для разных сценариев.

1. Функция DATEDIF: базовый синтаксис и подводные камни

Функция DATEDIF (или РАЗНДАТ в русской версии Excel) — основной инструмент для расчета разницы между датами. Ее синтаксис:

=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")

Ключевой параметр — "единица_измерения", который определяет, что именно считать:

  • 📅 "Y" — полные годы (игнорирует месяцы и дни). Пример: =DATEDIF("15.03.2000"; "14.03.2026"; "Y") вернет 23, хотя фактически прошло 24 года.
  • 📆 "M" — полные месяцы (игнорирует годы и дни).
  • 📌 "D" — полные дни (игнорирует годы и месяцы).
  • 🔄 "YM" — месяцы между датами без учета лет. Пример: разница между 01.01.2023 и 15.03.2023 составит 2 месяца.
  • 📏 "MD" — дни между датами без учета лет и месяцев.
  • 🎯 "YD" — дни между датами с учетом лет, но без месяцев.

Важная особенность: DATEDIF не документирована в официальной справке Excel, но работает во всех версиях программы. Однако в Google Таблицах она доступна как =DATEDIF без локализации.

⚠️ Внимание: Если конечная дата раньше начальной, DATEDIF вернет ошибку #ЧИСЛО!. Чтобы избежать этого, используйте проверку: =ЕСЛИ(B1>A1; DATEDIF(A1; B1; "Y"); "Ошибка: даты перепутаны").

2. Точный расчет возраста с учетом дня рождения

Чтобы определить, сколько человеку полных лет на конкретную дату (например, для проверки совершеннолетия), недостаточно просто вычесть годы. Нужно учитывать, прошел ли день рождения в текущем году. Решение:

=ЕСЛИ(ИЛИ(МЕСЯЦ(B1)>МЕСЯЦ(A1); И(МЕСЯЦ(B1)=МЕСЯЦ(A1); ДЕНЬ(B1)>=ДЕНЬ(A1))); DATEDIF(A1; B1; "Y"); DATEDIF(A1; B1; "Y")-1)

Разберем на примере:

Дата рождения (A1)Текущая дата (B1)ФормулаРезультат
18.05.200617.05.2026=DATEDIF(A1; B1; "Y")17 (неверно!)
18.05.200617.05.2026Формула выше17 (верно)
18.05.200618.05.2026Формула выше18 (верно)

Критичный нюанс: Если даты хранятся как текст (например, после импорта из CSV), Excel воспримет их как строки. Преобразуйте их в даты с помощью =ДАТАЗНАЧ(A1).

3. Альтернативные функции: YEARFRAC и комбинации

Функция YEARFRAC (или ДОЛЯГОДА) возвращает дробное количество лет между датами, что удобно для финансовых расчетов (например, амортизации). Синтаксис:

=YEARFRAC(начальная_дата; конечная_дата; [базис])

Параметр [базис] определяет метод расчета (по умолчанию = 0):

  • 📊 0 или опущено — американский метод (NASD). 30 дней в месяце, 360 в году.
  • 📈 1 — фактическое количество дней в месяце, 360 в году.
  • 📉 2 — фактическое количество дней в месяце, 365 в году (366 для високосного).
  • 📃 3 — фактическое количество дней в месяце и году.
  • 📌 4 — европейский метод. 30 дней в месяце, 360 в году, но с корректировкой.

Пример: =YEARFRAC("01.01.2020"; "31.12.2023"; 1) вернет ~3.997 (почти 4 года). Чтобы получить целое число лет, оберните в =ЦЕЛОЕ(YEARFRAC(...)).

⚠️ Внимание: YEARFRAC может давать неожиданные результаты при расчете между 29 февраля и 1 марта в невисокосный год. Для точности используйте базис 3.
📊 Какой метод расчета лет вы используете чаще?
DATEDIF
YEARFRAC
Ручной расчет
Другой вариант

4. Расчет стажа работы с учетом месяца

Для кадровых документов часто требуется указать стаж в формате "X лет Y месяцев". Комбинация DATEDIF с разными параметрами решает задачу:

=DATEDIF(A1; B1; "Y") & " лет " & DATEDIF(A1; B1; "YM") & " месяцев"

Если нужно учитывать дни (например, "2 года 3 месяца 15 дней"), добавьте:

=DATEDIF(A1; B1; "Y") & " г. " & DATEDIF(A1; B1; "YM") & " м. " & DATEDIF(A1; B1; "MD") & " дн."

Для корректного отображения склонений ("год", "года", "лет") используйте ВЫБОР:

=DATEDIF(A1;B1;"Y") & " " & ВЫБОР(DATEDIF(A1;B1;"Y") MOD 100; "год"; ВЫБОР(DATEDIF(A1;B1;"Y") MOD 10; 1; "год"; 2; "года"; 3; "года"; 4; "года"; "лет"); ВЫБОР(DATEDIF(A1;B1;"Y") MOD 10; 1; "год"; 2; "года"; 3; "года"; 4; "года"; "лет"))
Как автоматизировать расчет стажа для большого списка сотрудников

1. Создайте столбец с датой приема на работу (формат "Дата").

2. В соседнем столбце используйте формулу стажа (см. выше).

3. Скопируйте формулу вниз с помощью маркера автозаполнения.

4. Для динамического обновления замените конечную дату на =СЕГОДНЯ().

5. Ошибки и их решения

Типичные проблемы при расчете разницы между датами:

ОшибкаПричинаРешение
#ИМЯ?Опечатка в названии функцииПроверьте регистр: DATEDIF, а не Datedif.
#ЗНАЧ!Ячейка содержит текст, а не датуИспользуйте =ДАТАЗНАЧ() или измените формат ячейки.
#ЧИСЛО!Конечная дата раньше начальнойПоменяйте даты местами или добавьте проверку =ЕСЛИОШИБКА().
Неверный результат (на 1 год меньше)Не учтен день рождения в текущем годуИспользуйте формулу из раздела 2.

Если даты хранятся в нестандартном формате (например, "01-янв-2020"), преобразуйте их с помощью:

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

Ячейки содержат даты, а не текст|Формат ячеек — "Дата" (не "Общий" или "Текст")|Конечная дата не раньше начальной|Учет дня/месяца соответствует задаче-->

6. Продвинутые сценарии: високосные годы, рабочие дни, временные зоны

Для сложных расчетов используйте комбинации функций:

  • 🗓️ Високосные годы: Проверьте с помощью =ЕСЛИ(ИЛИ(ОСТАТ(GOD(A1); 400)=0; И(ОСТАТ(GOD(A1); 4)=0; ОСТАТ(GOD(A1); 100)<>0)); "Високосный"; "Не високосный").
  • 🏢 Рабочие дни: =ЧИСТРАБДНИ(A1; B1) — учитывает только будни, исключая выходные.
  • Временные зоны: Если даты в разных часовых поясах, приведите их к UTC с помощью =A1-(время_смещения/24).
  • 📅 Праздники: =ЧИСТРАБДНИ(A1; B1; [праздники]), где [праздники] — диапазон с датами праздников.

Пример расчета возраста с учетом високосных лет (для финансовых расчетов):

=ЕСЛИ(И(ДЕНЬ(B1)<ДЕНЬ(A1); МЕСЯЦ(B1)=МЕСЯЦ(A1)); DATEDIF(A1; B1; "Y")-1; DATEDIF(A1; B1; "Y")) + ЕСЛИ(И(ДЕНЬ(B1)=29; МЕСЯЦ(B1)=2; НЕ(ИЛИ(ОСТАТ(GOD(B1); 400)=0; И(ОСТАТ(GOD(B1); 4)=0; ОСТАТ(GOD(B1); 100)<>0)))); -1; 0)

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

Как посчитать количество полных лет между датами, если месяц и день не важны?

Используйте =DATEDIF(A1; B1; "Y"). Эта функция вернет разницу в полных годах, игнорируя месяцы и дни. Например, между 15.11.2000 и 14.11.2023 будет 22 года, даже если фактически прошло 23.

Почему формула =ГОД(B1)-ГОД(A1) иногда дает неверный результат?

Потому что она не учитывает, прошел ли день рождения (или аналогичная дата) в текущем году. Например, =ГОД("1.01.2026")-ГОД("31.12.2000") вернет 24, хотя фактически прошло только 23 года и 1 день. Используйте DATEDIF с проверкой месяца и дня.

Как рассчитать разницу в годах между сегодняшней датой и датой в ячейке?

Замените конечную дату на =СЕГОДНЯ():

=DATEDIF(A1; СЕГОДНЯ(); "Y")

Для динамического обновления нажмите F9 или включите автоматический пересчет в настройках Excel (Формулы → Параметры вычислений → Автоматически).

Можно ли посчитать годы между датами в Google Таблицах?

Да, синтаксис идентичен Excel:

=DATEDIF(A1; B1; "Y")

Отличия:

  • Функция называется DATEDIF (без локализации).
  • Для текущей даты используйте =TODAY() (вместо СЕГОДНЯ()).
  • Формат дат может отличаться — проверьте в настройках региона (Файл → Настройки → Региональные настройки).

Как вычесть годы из даты (например, найти дату 5 лет назад)?summary>

Используйте функцию =ДАТА(ГОД(A1)-5; МЕСЯЦ(A1); ДЕНЬ(A1)). Для добавления лет замените -5 на +5. Если нужно учесть високосные годы, используйте:

=ДАТАМЕС(A1; -5*12)

Эта функция автоматически корректирует день, если он отсутствует в целевом месяце (например, 31 февраля).