Формула Excel для расчёта месяцев между датами: полное руководство с примерами

Введение: зачем считать месяцы между датами в Excel?

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

Ключевая сложность заключается в том, что месяцы имеют разную продолжительность (28–31 день), а стандартные функции Excel не всегда корректно обрабатывают неполные периоды. В этой статье мы разберём 5 рабочих методов — от базовой функции DATEDIF до комбинированных формул с учётом календарных особенностей, а также покажем, как избежать типичных ошибок при работе с датами.

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

Функция DATEDIF (от англ. DATE DIFFerence) специально предназначена для вычисления разницы между датами в днях, месяцах или годах. Несмотря на то, что она не документирована в официальной справке Microsoft, она работает во всех версиях Excel (включая Excel 365 и Excel 2021).

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

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

Для подсчёта месяцев используйте параметр "m" (месяцы) или "ym" (месяцы без учёта лет). Например:

  • 📅 =DATEDIF("01.01.2023"; "15.03.2023"; "m") — вернёт 2 (полных месяца между датами).
  • 📊 =DATEDIF("01.01.2023"; "15.03.2023"; "ym") — вернёт 1 (месяцы за вычетом полных лет, но в этом случае разницы нет).
  • ⚠️ =DATEDIF("01.01.2023"; "31.01.2023"; "m") — вернёт 0, так как разница менее месяца.
⚠️ Внимание: Функция DATEDIF округляет результат в меньшую сторону. Если вам нужно учитывать неполные месяцы (например, 1.5 месяца), используйте методы из следующих разделов.
📊 Какой версией Excel вы пользуетесь?
Excel 365
Excel 2021
Excel 2019
Excel 2016
Другой

2. Комбинация YEAR и MONTH: альтернатива DATEDIF

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

= (ГОД(конечная_дата) - ГОД(начальная_дата)) * 12 + МЕСЯЦ(конечная_дата) - МЕСЯЦ(начальная_дата)

Пример:

= (YEAR("15.03.2023") - YEAR("01.01.2023")) * 12 + MONTH("15.03.2023") - MONTH("01.01.2023")

Результат: 14 (2 месяца разницы в годах + 2 месяца разницы между мартом и январём).

Формула Пример Результат Примечание
DATEDIF с "m" =DATEDIF("01.01.2023"; "15.03.2023"; "m") 2 Только полные месяцы
YEAR/MONTH = (2023-2023)*12 + 3-1 2 Аналог DATEDIF, но без учёта дней
DATEDIF с "ym" =DATEDIF("01.01.2022"; "15.03.2023"; "ym") 14 Месяцы без учёта полных лет

Этот метод полезен, если вам нужно раздельно анализировать годы и месяцы, например, для расчёта стажа в формате "X лет Y месяцев". Однако он не учитывает дни — если конечная дата раньше начальной по дню месяца, результат может быть некорректным.

3. Учёт неполных месяцев: формула с YEARFRAC

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

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

Параметр 1 в функции указывает на метод расчёта (фактическое количество дней в месяце). Примеры:

  • 📅 =YEARFRAC("01.01.2023"; "15.01.2023"; 1)*120.48 (примерно 15 дней из 31).
  • 📈 =YEARFRAC("01.01.2023"; "31.01.2023"; 1)*120.97 (почти полный месяц).
  • 🔍 =YEARFRAC("01.01.2023"; "01.02.2023"; 1)*121.00 (ровно месяц).
⚠️ Внимание: Функция YEARFRAC может давать неожиданные результаты при работе с датами в разных временных зонах или при переходе на летнее/зимнее время. Для финансовых расчётов используйте параметр 4 (европейский метод: 30 дней в месяце).

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

= CEILING(YEARFRAC("01.01.2023"; "15.01.2023"; 1)*12; 1)

Результат: 1 (округление 0.48 до 1).

Убедитесь, что даты введены в формате ДД.ММ.ГГГГ|

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

Используйте YEARFRAC с параметром 1 для точного учёта дней|

Округляйте результат, если требуются целые месяцы-->

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

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

= NETWORKDAYS(начальная_дата; конечная_дата) / 21.67

Почему 21.67? Это среднее количество рабочих дней в месяце (при 5-дневной рабочей неделе: 260 рабочих дней в году / 12 месяцев). Пример:

= NETWORKDAYS("01.01.2023"; "31.01.2023") / 21.67

Результат: 0.97 (21 рабочий день в январе 2023 года / 21.67 ≈ 0.97 месяца).

Для более точного расчёта создайте таблицу с праздничными днями и используйте её в качестве третьего аргумента NETWORKDAYS:

= NETWORKDAYS("01.01.2023"; "31.01.2023"; праздники!A2:A10) / 21.67
Как создать список праздников в Excel?

1. Создайте новый лист с названием "Праздники".

2. В столбце A перечислите даты праздников (например, "01.01.2023", "07.01.2023").

3. В формуле NETWORKDAYS укажите диапазон этого столбца как третий аргумент.

5. Продвинутый метод: массивы и условная логика

Если вам нужно гибко учитывать разные правила (например, считать месяц полным только после 15 дней или игнорировать определённые периоды), используйте формулы массива с IF и DAY. Пример:

= SUM(

IF(

DAY(ROW(INDIRECT("1:" & DAY(конечная_дата - начальная_дата)))) >= 15,

1,

0

)

) / 30

Эта формула подсчитывает количество "значимых" дней (≥15) и делит их на 30, чтобы получить приблизительное количество месяцев. Для ввода формулы массива нажмите Ctrl+Shift+EnterExcel 365 это не требуется).

Более практичный пример — подсчёт месяцев с учётом порога (например, 10 дней = 0.5 месяца):

= (YEAR(конечная_дата) - YEAR(начальная_дата)) * 12 +

(MONTH(конечная_дата) - MONTH(начальная_дата)) +

IF(DAY(конечная_дата) >= 10; 0.5; 0)

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

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

  • 🗓️ Некорректный формат даты: Если ячейка содержит текст (например, "январь 2023"), формулы не будут работать. Используйте ДАТАЗНАЧ для преобразования:
    = DATEDIF(ДАТАЗНАЧ("01.01.2023"); ДАТАЗНАЧ("15.03.2023"); "m")
  • ⚠️ Отрицательная разница: Если начальная дата позже конечной, DATEDIF вернёт ошибку. Добавьте проверку:
    = IF(начальная_дата > конечная_дата; "Ошибка"; DATEDIF(начальная_дата; конечная_дата; "m"))
  • 📉 Игнорирование високосных годов: Функции вроде YEARFRAC учитывают високосные годы автоматически, но при ручных расчётах это может стать источником ошибок.
⚠️ Внимание: В Excel для Mac функция DATEDIF может возвращать ошибку #ИМЯ? из-за особенностей локализации. В этом случае замените её на комбинацию YEAR/MONTH или используйте английскую версию функции: =DATEDIF(start_date; end_date; "m").

FAQ: Частые вопросы о расчёте месяцев в Excel

Можно ли посчитать месяцы между датами без учёта годов?

Да, используйте параметр "ym" в функции DATEDIF:

=DATEDIF("01.01.2020"; "15.03.2023"; "ym")

Эта формула вернёт 14 (месяцы без учёта полных лет).

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

Используйте комбинацию YEAR и MONTH с округлением вниз:

= (YEAR(конечная_дата) - YEAR(начальная_дата)) * 12 + MONTH(конечная_дата) - MONTH(начальная_дата)

Или упрощённо:

= DATEDIF(начальная_дата; конечная_дата; "m")

Почему YEARFRAC даёт неточный результат?

Функция YEARFRAC зависит от выбранного метода расчёта (параметр 1–4). Для финансовых расчётов используйте параметр 4 (30/360), а для календарных — 1 (фактическое количество дней). Пример:

=YEARFRAC("01.01.2023"; "31.01.2023"; 1)*12  → 0.97 (фактические дни)

=YEARFRAC("01.01.2023"; "31.01.2023"; 4)*12 → 1.00 (30/360)

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

Используйте функцию TODAY() для автоматического подставления текущей даты:

= DATEDIF("01.01.2023"; TODAY(); "m")

Эта формула будет обновляться при каждом открытии файла.

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

Да, комбинируйте NETWORKDAYS с делением на среднее количество рабочих дней в месяце (например, 21.67):

= NETWORKDAYS("01.01.2023"; "31.01.2023") / 21.67

Для точности создайте список праздников и укажите его в третьем аргументе.