Как определить количество месяцев между датами в Excel: пошаговое руководство с примерами

Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе временных интервалов. Чаще всего пользователям нужно вычислить разницу в месяцах между двумя датами: для расчёта стажа, срока действия договоров, планирования проектов или финансового учёта. Казалось бы, что может быть проще? Но здесь кроются подводные камни: Excel предлагает несколько способов решения этой задачи, и каждый из них даёт разный результат в зависимости от контекста.

Например, если вам нужно узнать, сколько полных календарных месяцев прошло между 15 января и 10 февраля, ответ будет зависеть от того, учитываете ли вы неполные периоды. В одних случаях важно получить целое число месяцев (даже если разница составляет 29 дней), в других — дробное значение с точностью до дня. Эта статья поможет разобраться во всех нюансах и выбрать оптимальный метод для вашей задачи.

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

1. Функция DATEDIF: универсальный инструмент для расчёта разницы

DATEDIF — это скрытая функция Excel, которая не отображается в списке мастер-функций, но работает во всех версиях программы, включая Excel 365 и Excel 2019. Она специально предназначена для вычисления разницы между датами в днях, месяцах или годах. Синтаксис функции:

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

Для подсчёта месяцев используется параметр "m". Например, формула =DATEDIF("01.01.2023"; "31.03.2023"; "m") вернёт значение 2, так как между 1 января и 31 марта прошло 2 полных месяца (февраль и март). Обратите внимание: функция всегда округляет результат в меньшую сторону, игнорируя неполные месяцы.

  • ✅ Подходит для расчёта полных календарных месяцев (например, стаж работы).
  • ⚠️ Не учитывает дробные значения — если разница 1 месяц и 29 дней, результат будет 1.
  • 🔄 Работает даже с отрицательными датами (если конечная дата раньше начальной).

Чтобы получить более точный результат с учётом дней, используйте параметр "md" (разница в днях без учёта месяцев) или комбинируйте функции. Например:

=DATEDIF(A1; B1; "m") & " месяцев и " & DATEDIF(A1; B1; "md") & " дней"

Эта формула выведет текст вида "2 месяцев и 15 дней".

2. Формула с YEAR и MONTH: альтернатива DATEDIF

Если по какой-то причине DATEDIF недоступна (например, в некоторых онлайн-версиях Excel), можно использовать комбинацию функций YEAR и MONTH. Этот метод даёт тот же результат, что и DATEDIF(..., "m"), но требует ручного учёта годов:

= (ГОД(Б2) - ГОД(Б1)) * 12 + МЕСЯЦ(Б2) - МЕСЯЦ(Б1)

Где Б1 — ячейка с начальной датой, Б2 — с конечной. Формула работает по принципу:

  1. Вычисляем разницу в годах и умножаем на 12 (количество месяцев в году).
  2. Добавляем разницу в месяцах между датами.

Например, для интервала с 15.06.2022 по 20.11.2023 расчёт будет таким: (2023 - 2022) * 12 + (11 - 6) = 17 месяцев.

⚠️ Внимание: Эта формула не учитывает порядок дат! Если конечная дата раньше начальной, результат будет положительным, но некорректным. Добавьте проверку с функцией ЕСЛИ:
=ЕСЛИ(Б2>Б1; (ГОД(Б2)-ГОД(Б1))*12+МЕСЯЦ(Б2)-МЕСЯЦ(Б1); "Ошибка: даты перепутаны")
Почему результат может отличаться от DATEDIF?

Если начальная дата — 31 января, а конечная — 1 марта, DATEDIF вернёт 1 месяц (так как 28 февраля ещё не наступило), а формула с YEAR/MONTH даст 2 месяца. Это связано с тем, что DATEDIF учитывает фактическое количество дней в каждом месяце, а альтернативный метод оперирует только номерами месяцев.

3. Точный расчёт с учётом дней: функция YEARFRAC

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

=YEARFRAC(начальная_дата; конечная_дата; 1) * 12

Параметр 1 указывает на метод расчёта (фактическое количество дней в месяце). Например, для интервала с 01.01.2023 по 15.02.2023 формула вернёт 1.4516 (1 полный месяц + 15 дней из 31 в январе).

  • 📊 Идеально для амортизационных расчётов или процентных ставок.
  • 🔢 Позволяет округлить результат до нужного количества знаков с помощью ОКРУГЛ.
  • ⚠️ Чувствительна к формату дат — убедитесь, что ячейки имеют тип Дата.

Чтобы получить результат в виде десятичной дроби с двумя знаками после запятой:

=ОКРУГЛ(YEARFRAC(A1; B1; 1) * 12; 2)
📊 Какой метод расчёта месяцев вы используете чаще?
DATEDIF
YEAR и MONTH
YEARFRAC
Другой вариант
Не знаю, что это

4. Учёт неполных месяцев: комбинированные формулы

Иногда требуется посчитать месяцы с учётом порогового значения дней. Например, если разница между датами составляет 30 дней, считать это за 1 месяц, а если 29 — то за 0. Для этого используйте условную логику с функцией ЕСЛИ:

=ЕСЛИ(ДНИ(B1-A1)>=30; DATEDIF(A1; B1; "m")+1; DATEDIF(A1; B1; "m"))

Где ДНИ(B1-A1) вычисляет разницу в днях между датами. Если она больше или равна 30, к результату DATEDIF добавляется 1.

Для более гибкого подхода можно задать переменный порог (например, 25 дней):

=DATEDIF(A1; B1; "m") + ЕСЛИ(ОСТАТ(ДНИ(B1-A1); 30)>=25; 1; 0)

Здесь ОСТАТ(ДНИ(...); 30) вычисляет остаток дней после полных месяцев, а ЕСЛИ добавляет 1, если остаток ≥ 25.

⚠️ Внимание: При работе с большими диапазонами дат (более 10 лет) комбинированные формулы могут замедлять пересчёт таблицы. В таких случаях используйте DATEDIF без дополнительных условий или оптимизируйте расчёты с помощью Power Query.

Убедитесь, что ячейки с датами имеют формат "Дата"|Проверьте порядок дат (начальная ≤ конечной)|Тестируйте формулу на крайних случаях (например, 31.01 → 01.03)|Используйте CTRL+; для быстрой вставки текущей даты-->

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

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

  1. Вычислите общее количество дней между датами: =B1-A1.
  2. Посчитайте количество рабочих дней: =ЧИСТРАБДНИ(A1; B1).
  3. Переведите рабочие дни в месяцы, исходя из среднего количества рабочих дней в месяце (обычно 21–22):
    =ЧИСТРАБДНИ(A1; B1) / 21.67

Значение 21.67 — это среднее количество рабочих дней в месяце при 5-дневной рабочей неделе (260 рабочих дней в году / 12 месяцев). Для точности можно использовать фактическое количество рабочих дней в вашей организации.

МетодФормулаПример результатаКогда использовать
DATEDIF ("m")=DATEDIF(A1; B1; "m")2 (для 01.01–31.03)Полные календарные месяцы
YEAR + MONTH=(ГОД(B1)-ГОД(A1))*12+МЕСЯЦ(B1)-МЕСЯЦ(A1)17 (для 15.06.2022–20.11.2023)Альтернатива DATEDIF
YEARFRAC=YEARFRAC(A1; B1; 1)*121.45 (для 01.01–15.02)Дробные месяцы
С учётом порога дней=DATEDIF(A1; B1; "m") + ЕСЛИ(ОСТАТ(ДНИ(B1-A1); 30)>=25; 1; 0)3 (для 01.01–26.03)Гибкие правила округления
Рабочие дни=ЧИСТРАБДНИ(A1; B1) / 21.672.31 (для 60 календарных дней)Производственный календарь

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

Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот самые распространённые из них и способы их решения:

  • 🗓️ Некорректный формат ячеек: Если формула возвращает ошибку #ЗНАЧ!, проверьте, что обе ячейки имеют формат Дата. Выделите ячейки и нажмите CTRL+1, затем выберите формат Дата.
  • 🔄 Перепутанные даты: Если начальная дата позже конечной, DATEDIF вернёт ошибку. Используйте ЕСЛИ для проверки:
    =ЕСЛИ(A1>B1; "Ошибка: даты перепутаны"; DATEDIF(A1; B1; "m"))
  • 📅 Игнорирование високосных лет: Функции вроде YEARFRAC автоматически учитывают високосные годы, но если вы используете ручные расчёты, не забудьте про 29 февраля.

Критическая ошибка: если в ячейке с датой хранится текст (например, "01.01.2023" введён как текст, а не дата), все формулы будут работать некорректно. Чтобы исправить это, используйте функцию ДАТАЗНАЧ:

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

Ещё одна частая проблема — разные региональные настройки. Например, в американском формате даты месяц идёт перед днём (MM/DD/YYYY), что может привести к путанице. Всегда уточняйте формат данных в настройках Excel (Файл → Параметры → Язык).

7. Продвинутые сценарии: динамические диапазоны и Power Query

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

  • 📊 Условное форматирование: Подсвечивайте ячейки, где разница между датами превышает заданное количество месяцев. Например, чтобы выделить просроченные задачи:
    =DATEDIF(SEГОДНЯ(); B1; "m") > 3

    (выделяет строки, где с сегодняшнего дня до даты в B1 больше 3 месяцев).

  • 🔄 Power Query: Для обработки больших массивов данных импортируйте таблицу в Power Query и добавьте столбец с формулой:
    = Date.From(B1) - Date.From(A1)

    Затем преобразуйте результат в месяцы.

  • 📈 Сводные таблицы: Группируйте данные по месяцам, чтобы анализировать временные тренды. Для этого добавьте поле с датой в область строк и сгруппируйте по месяцам.

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


Function WorkMonths(startDate As Date, endDate As Date) As Double

Dim workDays As Integer

workDays = Application.WorksheetFunction.NetWorkdays(startDate, endDate)

WorkMonths = workDays / 21.67

End Function

Чтобы использовать её, нажмите ALT+F11, вставьте код в модуль и вызовите функцию в Excel как =WorkMonths(A1; B1).

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

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

Используйте функцию ЕСЛИОШИБКА, чтобы избежать ошибок:

=ЕСЛИОШИБКА(DATEDIF(A1; B1; "m"); "Данные отсутствуют")

Или проверяйте пустые ячейки явно:

=ЕСЛИ(ИЛИ(A1=""; B1=""); "Нет данных"; DATEDIF(A1; B1; "m"))
Почему DATEDIF даёт другой результат, чем ручной подсчёт?

Функция DATEDIF учитывает фактическое количество дней в каждом месяце. Например, между 31 января и 1 марта она вернёт 1 месяц (так как 28 февраля ещё не наступило), тогда как вручную можно посчитать 2 месяца. Чтобы унифицировать результат, используйте параметр "ym" для разницы в месяцах с учётом годов.

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

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

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

Для точности создайте таблицу с производственным календарём и используйте СУММПРОИЗВ.

Как округлить результат до целых месяцев?

Используйте функцию ОКРУГЛ или ОКРУГЛВНИЗ/ОКРУГЛВВЕРХ в зависимости от задачи:

=ОКРУГЛ(YEARFRAC(A1; B1; 1)*12; 0)

Для округления в большую сторону (например, для биллинга):

=ОКРУГЛВВЕРХ(YEARFRAC(A1; B1; 1)*12; 0)
Как посчитать месяцы между датами в Google Таблицах?

В Google Sheets работает та же функция DATEDIF, но с англоязычным синтаксисом:

=DATEDIF(A1; B1; "m")

Также доступны YEARFRAC и комбинации с YEAR/MONTH. Обратите внимание, что в Google Таблицах разделителем аргументов является запятая (,), а не точка с запятой (;).