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

Расчёт разницы в годах между двумя датами — одна из самых распространённых задач при работе с временными данными в Microsoft Excel и Google Таблицах. Казалось бы, что может быть проще: вычесть одну дату из другой и разделить на 365? Но на практике такой подход даёт погрешности из-за високосных лет, разных форматов дат и требований к "полноте" года. Например, разница между 1 января 2020 и 31 декабря 2022 — это 2 полных года или 3? А как быть, если дата окончания ещё не наступила?

В этой статье мы разберём 5 надёжных способов посчитать количество полных лет между датами, включая скрытую функцию РАЗНДАТ (DATEDIF), универсальную YEARFRAC, а также комбинации стандартных функций. Вы узнаете, как избежать ошибок с отрицательными значениями, почему иногда результаты отличаются на ±1 год, и как адаптировать формулы под специфические задачи — от расчёта стажа до определения возраста клиентов.

Особое внимание уделим нюансам работы с датами в разных версиях Excel (2010, 2016, 2019, 365) и Google Таблицах, а также разберём типичные ошибки, из-за которых формулы возвращают #ЧИСЛО! или некорректные значения. В конце статьи — FAQ с ответами на частые вопросы и таблица сравнения методов.

1. Функция РАЗНДАТ (DATEDIF) — скрытый инструмент Excel

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

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

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

где "Y" — это код для возврата полных лет. Другие варианты:

  • 📅 "M" — полные месяцы между датами
  • 📆 "D" — полные дни
  • 🔄 "YM" — месяцы без учёта лет
  • 📈 "MD" — дни без учёта месяцев и лет
  • 🔢 "YD" — дни без учёта лет

Пример: чтобы посчитать, сколько полных лет прошло с 15.05.2018 по 10.03.2023, используйте:

=РАЗНДАТ("15.05.2018"; "10.03.2023"; "Y")

Результат: 4 (несмотря на то, что с мая 2018 до марта 2023 прошло почти 5 лет, полных лет — 4).

⚠️ Внимание: Если конечная дата раньше начальной, функция вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, используйте ЕСЛИОШИБКА или проверку ЕСЛИ.

Google Таблицы также поддерживают DATEDIF, но с англоязычным синтаксисом:

=DATEDIF("15.05.2018"; "10.03.2023"; "Y")

2. YEARFRAC — универсальная функция для дробных лет

Функция YEARFRAC (в русскоязычной версии — ДОЛЯГОДА) возвращает дробное количество лет между двумя датами, что полезно для финансовых расчётов (например, амортизации). Однако её можно адаптировать и для получения целых лет с помощью ЦЕЛОЕ или ОКРВНИЗ.

Синтаксис:

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

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

  • 📌 0 или опущено — американский метод (NASD) 30/360
  • 📍 1 — фактическое/фактическое
  • 📎 2 — фактическое/360
  • 📐 3 — фактическое/365
  • 📏 4 — европейский метод 30/360

Чтобы получить полные годы, оберните YEARFRAC в ОКРВНИЗ:

=ОКРВНИЗ(YEARFRAC("15.05.2018"; "10.03.2023"; 1); 0)

Результат: 4 (аналогично РАЗНДАТ).

Отличие от РАЗНДАТ: YEARFRAC учитывает дробные доли года, поэтому может давать более точные результаты для неполных периодов. Например, при базисе 1 (фактическое/фактическое) формула учтёт реальное количество дней между датами.

Функция Синтаксис Результат для
15.05.2018 — 10.03.2023
Особенности
РАЗНДАТ =РАЗНДАТ(A1; B1; "Y") 4 Только целые годы, ошибка при отрицательной разнице
YEARFRAC =ОКРВНИЗ(YEARFRAC(A1; B1; 1); 0) 4 Дробные годы, зависит от базиса
ГОД + ЕСЛИ =ГОД(B1)-ГОД(A1)-ЕСЛИ(...) 4 Требует ручной проверки месяца/дня

3. Комбинация ГОД, МЕСЯЦ и ДЕНЬ: ручной расчёт

Если вам нужна максимальная гибкость или функции РАЗНДАТ/YEARFRAC недоступны (например, в некоторых локализациях Excel), можно использовать комбинацию стандартных функций:

=ГОД(конечная_дата) - ГОД(начальная_дата) - ЕСЛИ(ИЛИ(МЕСЯЦ(конечная_дата) < МЕСЯЦ(начальная_дата); И(МЕСЯЦ(конечная_дата) = МЕСЯЦ(начальная_дата); ДЕНЬ(конечная_дата) < ДЕНЬ(начальная_дата))); 1; 0)

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

1. ГОД(конечная_дата) - ГОД(начальная_дата) — разница в годах.

2. ЕСЛИ проверяет, не "недотягивает" ли конечная дата до полного года по месяцу и дню.

3. Если месяц конечной даты раньше начального ИЛИ месяцы совпадают, но день раньше — вычитаем 1 год.

Пример для дат 15.05.2018 и 10.03.2023:

- Разница годов: 2023 − 2018 = 5.

- Март (3) < мая (5)? Да → вычитаем 1.

- Итог: 4 полных года.

⚠️ Внимание: Эта формула не учитывает високосные годы, но для расчёта полных лет (без дробей) это не критично.

Сравните месяцы конечной и начальной дат|Проверьте дни, если месяцы совпадают|Убедитесь, что конечная дата не раньше начальной|Используйте ЕСЛИОШИБКА для обработки ошибок-->

4. Расчёт возраста на текущую дату (динамический)

Частая задача — посчитать возраст человека или стаж сотрудника на сегодняшний день. Для этого замените конечную дату на СЕГОДНЯ():

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

где A1 — ячейка с датой рождения или начала периода.

Пример: если в A1 указана дата 12.11.1990, а сегодня 20.07.2026, формула вернёт 34 (полных года).

Для Google Таблиц используйте:

=DATEDIF(A1; TODAY(); "Y")

Если нужно учитывать будущие даты (например, для планирования юбилеев), добавьте проверку:

=ЕСЛИ(СЕГОДНЯ() >= A1; РАЗНДАТ(A1; СЕГОДНЯ(); "Y"); "Дата ещё не наступила")
📊 Какой способ расчёта лет вы используете чаще?
Функция РАЗНДАТ
YEARFRAC с округлением
Ручная формула с ГОД/МЕСЯЦ
Другой вариант

5. Ошибки и их решения: почему формулы не работают

Даже простые формулы могут давать сбои. Разберём топ-5 ошибок и способы их исправления:

  1. #ЧИСЛО! — конечная дата раньше начальной.

    Решение: используйте ЕСЛИ или ЕСЛИОШИБКА:

    =ЕСЛИОШИБКА(РАЗНДАТ(A1; B1; "Y"); "Ошибка: даты перепутаны")
  2. #ЗНАЧ! — ячейка содержит текст вместо даты.

    Решение: проверьте формат ячейки (Формат → Дата) или используйте ДАТАЗНАЧ:

    =РАЗНДАТ(ДАТАЗНАЧ(A1); ДАТАЗНАЧ(B1); "Y")
  3. Неправильное округлениеYEARFRAC даёт дробь, а нужны целые годы.

    Решение: оберните в ОКРВНИЗ или ЦЕЛОЕ.

  4. Разница на ±1 год — из-за времени (например, 23:59 vs 00:01).

    Решение: используйте ЦЕЛОЕ(A1) для обрезки времени.

  5. Функция РАЗНДАТ не находится — в некоторых локализациях Excel.

    Решение: введите её вручную или используйте YEARFRAC.

Критическая ошибка: если даты введены как текст (например, "01.01.2020" без формата даты), Excel воспримет их как строки, и формулы не сработают. Всегда проверяйте формат ячеек!

Как проверить формат ячейки?

Выделите ячейку → нажмите Ctrl+1 (или правая кнопка → "Формат ячеек") → во вкладке "Число" должен быть выбран формат "Дата". Если там "Текстовый" — измените формат и повторите ввод даты.

6. Продвинутые сценарии: стаж, юбилеи, сроки действия

Расчёт полных лет нужен не только для возраста, но и для бизнес-задач. Рассмотрим 3 практических примера:

1. Стаж сотрудника на дату увольнения

Если в A1 — дата приёма, а в B1 — дата увольнения:

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

Результат: "4 лет, 2 мес." (для периода с 15.05.2018 по 10.07.2022).

2. Определение юбилейных дат

Чтобы выделить сотрудников с юбилеем (кратным 5 годам):

=ЕСЛИ(ОСТАТ(РАЗНДАТ(A1; СЕГОДНЯ(); "Y"); 5) = 0; "Юбилей!"; "")

3. Срок действия документов

Если в A1 — дата выдачи паспорта (срок действия 10 лет), а в B1 — текущая дата:

=ЕСЛИ(РАЗНДАТ(A1; B1; "Y") >= 10; "Срок истёк"; "Действителен")

7. Сравнение методов: какой способ выбрать

Какой метод лучше — зависит от задачи:

  • 🔍 Точность: РАЗНДАТ и ручная формула дают одинаковый результат для полных лет. YEARFRAC точнее для дробных периодов.
  • 📊 Универсальность: YEARFRAC работает во всех версиях Excel и Google Таблицах, но требует округления.
  • Производительность: РАЗНДАТ быстрее, так как не требует дополнительных вычислений.
  • 🛠 Гибкость: Ручная формула позволяет учитывать специфические условия (например, "считать год полным, если прошло ≥11 месяцев").

Рекомендации:

- Для простых расчётов (возраст, стаж) — РАЗНДАТ.

- Для финансовых моделейYEARFRAC с нужным базисом.

- Для сложной логики (например, "считать год полным при 300+ днях") — ручная формула.

Совет: если вы работаете с большими массивами данных, тестируйте производительность методов на копии файла — некоторые функции могут замедлять пересчёт.

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

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

Используйте =РАЗНДАТ(A1; СЕГОДНЯ(); "Y"), где A1 — начальная дата. Функция СЕГОДНЯ() всегда возвращает текущую дату.

❓ Почему РАЗНДАТ даёт результат на 1 год меньше, чем ожидалось?

Функция считает полные годы. Например, между 01.01.2020 и 31.12.2022 прошло 2 полных года (2020 и 2021), а не 3. Чтобы включить текущий год, используйте =РАЗНДАТ(A1; B1; "Y") + 1, но это может давать завышенные результаты.

❓ Можно ли посчитать годы с учётом високосных?

Для целых лет високосные не влияют на результат (так как мы считаем полные периоды). Если нужны дробные годы с учётом високосных, используйте YEARFRAC с базисом 1 (фактическое/фактическое).

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

Аналогично Excel, но с англоязычными функциями:

=DATEDIF(A1; B1; "Y")

или

=FLOOR(YEARFRAC(A1; B1; 1); 1)

❓ Что делать, если даты введены как текст (например, "01.01.2020")?

Преобразуйте текст в дату с помощью ДАТАЗНАЧ:

=РАЗНДАТ(ДАТАЗНАЧ(A1); ДАТАЗНАЧ(B1); "Y")

или измените формат ячейки на "Дата" и повторите ввод.