Расчёт разницы в годах между двумя датами — одна из самых распространённых задач при работе с временными данными в 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"); "Дата ещё не наступила")
5. Ошибки и их решения: почему формулы не работают
Даже простые формулы могут давать сбои. Разберём топ-5 ошибок и способы их исправления:
- #ЧИСЛО! — конечная дата раньше начальной.
Решение: используйте
ЕСЛИилиЕСЛИОШИБКА:=ЕСЛИОШИБКА(РАЗНДАТ(A1; B1; "Y"); "Ошибка: даты перепутаны") - #ЗНАЧ! — ячейка содержит текст вместо даты.
Решение: проверьте формат ячейки (
Формат → Дата) или используйтеДАТАЗНАЧ:=РАЗНДАТ(ДАТАЗНАЧ(A1); ДАТАЗНАЧ(B1); "Y") - Неправильное округление —
YEARFRACдаёт дробь, а нужны целые годы.Решение: оберните в
ОКРВНИЗилиЦЕЛОЕ. - Разница на ±1 год — из-за времени (например, 23:59 vs 00:01).
Решение: используйте
ЦЕЛОЕ(A1)для обрезки времени. - Функция РАЗНДАТ не находится — в некоторых локализациях 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")
или измените формат ячейки на "Дата" и повторите ввод.