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

Расчет разницы между датами в годах и месяцах — одна из самых востребованных задач в Microsoft Excel и Google Таблицах. Без этого не обойтись при анализе стажа сотрудников, сроков проектов, возраста клиентов или амортизации оборудования. Казалось бы, что может быть проще: вычесть одну дату из другой? Но на практике пользователи сталкиваются с массой нюансов: как учесть неполные месяцы, почему формула РАЗНДАТ выдает ошибку #ИМЯ?, или как получить результат в формате "2 года 5 месяцев 18 дней" вместо сухих цифр.

В этой статье вы найдете 5 проверенных способов рассчитать разницу между датами — от базовых функций до продвинутых комбинаций. Мы разберем, как работать с неполными периодами, избегать ошибок при копировании формул и даже автоматизировать процесс с помощью Power Query. А в конце — бонус: готовая таблица с формулами для копирования и FAQ по типичным проблемам.

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

📊 Какую версию Excel вы используете?
Excel 2010-2016
Excel 2019-2023
Excel 365
Google Таблицы
Другая

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

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

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

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

Где единица_измерения может принимать значения:

  • 📅 "Y" — полные годы между датами
  • 📆 "M" — полные месяцы (без учета годов)
  • 🕒 "D" — дни (без учета месяцев и лет)
  • 📊 "YM" — месяцы с вычетом полных лет
  • 📈 "MD" — дни с вычетом полных месяцев и лет
  • 🔢 "YD" — дни с вычетом полных лет (игнорирует месяцы)

Пример: чтобы узнать, сколько полных лет и месяцев прошло с 15.03.2018 по 20.11.2023, используйте две формулы:

=DATEDIF("15.03.2018"; "20.11.2023"; "Y")  // Вернет 5 (полных лет)

=DATEDIF("15.03.2018"; "20.11.2023"; "YM") // Вернет 8 (месяцев сверх полных лет)

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

2. Комбинация функций для результата "X лет Y месяцев"

Часто требуется получить разницу в формате "3 года 2 месяца", а не отдельные числа. Для этого комбинируем DATEDIF с текстовыми функциями:

=DATEDIF(A1; B1; "Y") & " год(а) " & DATEDIF(A1; B1; "YM") & " месяц(ев)"

Но этот способ не учитывает склонение слов. Для корректного отображения используйте вложенную функцию ВЫБОР:

=DATEDIF(A1;B1;"Y") & " " & ВЫБОР(DATEDIF(A1;B1;"Y");"год";"года";"год";"года";"лет") &

" " & DATEDIF(A1;B1;"YM") & " " & ВЫБОР(DATEDIF(A1;B1;"YM");"месяц";"месяца";"месяцев";"месяца";"месяцев")

Для Google Таблиц замените ВЫБОР на CHOSE (английская версия функции).

Убедитесь, что ячейки с датами отформатированы как Дата (не текст!)

Проверьте порядок дат (начальная ≤ конечной)

Для точного расчета используйте DATEDIF с параметром "MD" для дней

Тестируйте формулу на крайних случаях (например, 29 февраля)-->

3. Функция YEARFRAC: расчет в долях года

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

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

Параметр [базис] определяет метод расчета:

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

Пример: расчет стажа в годах для премирования:

=YEARFRAC("01.07.2020"; СЕГОДНЯ(); 1)

Вернет значение типа 3.416 (3 года и ~5 месяцев).

⚠️ Внимание: YEARFRAC может давать неточности при расчете с 29 февраля. Для критичных вычислений (например, процентов по кредиту) используйте базис 1 (фактический/фактический).

4. Альтернативные способы: без DATEDIF

Если DATEDIF по какой-то причине недоступна (например, в некоторых локализациях Excel), используйте комбинацию стандартных функций:

Для полных лет:

=ЦЕЛОЕ((B1-A1)/365,25)

Где 365,25 — среднее количество дней в году с учетом високосных.

Для полных месяцев:

=ЦЕЛОЕ((ГОД(B1)-ГОД(A1))*12+МЕСЯЦ(B1)-МЕСЯЦ(A1))

Для дней (с учетом месяцев и лет):

=B1-ДАТА(ГОД(B1); МЕСЯЦ(B1)-DATEDIF(A1;B1;"M"); ДЕНЬ(A1))
Почему 365.25, а не 365?

Средняя продолжительность года по григорианскому календарю — 365.2425 дней (учитывает високосные года, кроме лет, кратных 100, но не 400). Для упрощенных расчетов хватает 365.25, но для финансовых вычислений лучше использовать точные календарные методы.

5. Расчет с учетом рабочих дней

Если нужно посчитать разницу в рабочих днях (исключая выходные и праздники), используйте функцию ЧИСТРАБДНИ:

=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])

Для расчета в рабочих месяцах (20 рабочих дней = ~1 месяц) используйте формулу:

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

Пример с учетом российских праздников (ячейки D1:D10 содержат даты праздников):

=ЧИСТРАБДНИ("01.01.2023"; "31.12.2023"; D1:D10)/20
Задача Формула Пример результата
Полные годы =DATEDIF(A1;B1;"Y") 5
Полные месяцы =DATEDIF(A1;B1;"M") 65
Годы с десятичной частью =YEARFRAC(A1;B1;1) 5.67
Текстовый формат =DATEDIF(A1;B1;"Y") & "г " & DATEDIF(A1;B1;"YM") & "м" 5г 8м
Рабочие дни =ЧИСТРАБДНИ(A1;B1) 1300

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

Ошибка #1: Формула возвращает #ИМЯ?

Причина: Неправильное название функции (например, РАЗНДАТА вместо РАЗНДАТ) или опечатка в параметрах. В английской версии Excel используйте DATEDIF, в русской — РАЗНДАТ.

Ошибка #2: Некорректный расчет месяцев

Если вы используете DATEDIF(A1;B1;"M"), она вернет общее количество месяцев между датами, а не месяцы за вычетом полных лет. Для последнего нужна единица измерения "YM".

Ошибка #3: Даты в текстовом формате

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

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

7. Автоматизация: Power Query для массовых расчетов

Если вам нужно рассчитать разницу между датами для тысяч строк, ручной ввод формул неэффективен. Используйте Power Query (доступен в Excel 2016+ и Excel 365):

  1. Выделите таблицу с датами → Данные → Получить данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте столбец: Добавить столбец → Настраиваемый столбец.
  3. Введите формулу:
    Duration.Days([КонечнаяДата] - [НачальнаяДата]) / 365.25

    (замените имена столбцов на свои).

  4. Нажмите Закрыть и загрузить — результат появится на новом листе.

Преимущество этого метода: формула автоматически применяется ко всем строкам, и при обновлении исходных данных достаточно нажать "Обновить все" в разделе Данные.

8. Готовые формулы для копирования

Скопируйте нужную формулу и замените A1 и B1 на адреса ваших ячеек с датами.

Что рассчитать Формула
Полные годы =DATEDIF(A1;B1;"Y")
Полные месяцы (всего) =DATEDIF(A1;B1;"M")
Месяцы сверх полных лет =DATEDIF(A1;B1;"YM")
Дни сверх полных месяцев =DATEDIF(A1;B1;"MD")
Годы с десятичной частью =YEARFRAC(A1;B1;1)
Текстовый формат "X лет Y месяцев" =DATEDIF(A1;B1;"Y") & " лет " & DATEDIF(A1;B1;"YM") & " мес."
Рабочие дни (без праздников) =ЧИСТРАБДНИ(A1;B1)

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

Почему DATEDIF считает 1 января 2020 — 1 января 2021 как 0 лет?

Функция DATEDIF с параметром "Y" возвращает полные годы. Поскольку 1 января 2021 еще не исполнился полный год с 1 января 2020 (разница ровно 1 год, но без единого дня сверху), результат — 0. Чтобы получить 1, используйте параметр "YD" или комбинацию "Y" + "YM".

Как посчитать возраст на текущую дату?

Используйте:

=DATEDIF(A1; СЕГОДНЯ(); "Y") & " лет, " & DATEDIF(A1; СЕГОДНЯ(); "YM") & " мес."

Функция СЕГОДНЯ() всегда возвращает текущую дату и обновляется при пересчете листа.

Можно ли посчитать разницу между датой и временем?

Да, но для этого нужно преобразовать дату+время в числовой формат. Например:

= (B1-A1)*24

Вернет разницу в часах. Для минут умножьте на 1440 (24*60).

Почему YEARFRAC дает другой результат, чем DATEDIF?

YEARFRAC рассчитывает долю года (например, 1.5 года), а DATEDIF с параметром "Y" — только полные годы. Для сопоставимых результатов используйте:

=ЦЕЛОЕ(YEARFRAC(A1;B1;1))

Это округлит долю года до целого числа.

Как посчитать разницу между датами в Google Таблицах?

Все формулы работают аналогично, но:

  • Используйте DATEDIF (английское название даже в русской версии)
  • Для текстового формата замените ВЫБОР на CHOSE
  • Функция СЕГОДНЯ пишется как TODAY()