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

Почему стандартное вычитание дат не работает для месяцев

Вы когда-нибудь пытались просто вычесть одну дату из другой в Excel, чтобы узнать количество месяцев между ними — и получали бессмысленное число вроде 432,87? Это происходит потому, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), где целое число обозначает дни, а дробная часть — время. При вычитании двух дат программа возвращает разницу в днях, а не в месяцах.

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

Прежде чем переходить к формулам, убедитесь, что ваши данные имеют формат дата, а не текст. Проверить это можно по выравниванию ячейки: даты по умолчанию выравниваются по правому краю, а текст — по левому. Если формат неправильный, выделите ячейки и нажмите Ctrl+1 (или Формат ячеек → Дата).

📊 Как часто вам нужно считать разницу между датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

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

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

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

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

Для подсчёта месяцев используйте параметр "m":

=DATEDIF(A2; B2; "m")

Пример: если в ячейке A2 указано 15.05.2023, а в B220.08.2023, формула вернёт 3 (май–август включительно).

  • Плюсы: простой синтаксис, не требует дополнительных вычислений.
  • ⚠️ Минусы: не учитывает неполные месяцы (например, с 31.01.2023 по 15.02.2023 вернёт 1, хотя прошло 1,5 месяца).
  • 🔄 Альтернатива: для точного учёта дней используйте параметр "md" (разница в днях без учёта полных месяцев).
⚠️ Внимание: Функция DATEDIF чувствительна к порядку дат. Если начальная дата позже конечной, результат будет ошибкой #ЧИСЛО!. Используйте =ABS(DATEDIF(...)), чтобы избежать этого.

☑️ Проверка перед использованием DATEDIF

Выполнено: 0 / 4

Метод 2: Комбинация YEAR и MONTH для точного расчёта

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

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

или в английской версии:

= (YEAR(B2)-YEAR(A2))*12 + MONTH(B2) - MONTH(A2)

Эта формула работает так:

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

Пример: для дат 10.11.2022 и 05.03.2023 результат будет 4 (ноябрь, декабрь, январь, февраль). Обратите внимание, что март не учитывается, так как конечная дата — 5 марта, а не полный месяц.

Начальная датаКонечная датаФормулаРезультат
01.01.202331.01.2023= (YEAR(B2)-YEAR(A2))*12 + MONTH(B2) - MONTH(A2)0
15.02.202310.03.2023= (YEAR(B2)-YEAR(A2))*12 + MONTH(B2) - MONTH(A2)1
30.06.202315.09.2023= (YEAR(B2)-YEAR(A2))*12 + MONTH(B2) - MONTH(A2)3
⚠️ Внимание: Эта формула игнорирует дни внутри месяцев. Если вам нужно учитывать частичные месяцы (например, с 25 января по 10 февраля), используйте метод 4 с функцией DAY.

Метод 3: Учёт неполных месяцев с функцией DAY

Если важно учитывать даже частичные месяцы (например, с 20 января по 5 февраля считать как 1 месяц), модифицируйте формулу из метода 2:

= (ГОД(Б2)-ГОД(А2))*12 + МЕСЯЦ(Б2) - МЕСЯЦ(А2) + (ДЕНЬ(Б2) >= ДЕНЬ(А2))

Логика:

  • ✅ Если день конечной даты (ДЕНЬ(Б2)) больше или равен дню начальной даты (ДЕНЬ(А2)), добавляется +1 месяц.
  • ❌ Если день конечной даты меньше, месяц не учитывается.

Примеры:

  • 📅 10.01.202315.02.20231 (15 ≥ 10).
  • 📅 25.01.202310.02.20230 (10 < 25).

Критический нюанс: эта формула может давать неожиданные результаты при пересечении границ годов. Например, для дат 30.12.2022 и 01.01.2023 результат будет 0, хотя прошёл 1 день нового года. В таких случаях комбинируйте метод с DATEDIF.

Почему DAY не работает с 31 числом?

Если начальная дата — 31 января, а конечная — 28 февраля, условие (ДЕНЬ(Б2) >= ДЕНЬ(А2)) никогда не выполнится (28 < 31), и февраль не будет засчитан. Для таких случаев используйте функцию ЕСЛИОШИБКА или модифицируйте логику.

Метод 4: Расчёт в рабочих месяцах (исключая выходные)

Если вам нужно посчитать месяцы без учёта выходных и праздников (например, для расчёта стажа или проектных сроков), используйте комбинацию функций NETWORKDAYS (рабочие дни) и деления на среднее количество рабочих дней в месяце (~21 день):

= РАБДЕНЬ(А2; Б2) / 21

или с округлением до целых месяцев:

= ОКРУГЛВНИЗ(РАБДЕНЬ(А2; Б2) / 21; 0)

Пример: для дат 01.01.2023 (воскресенье) и 31.01.2023 (в январе 2023 года 22 рабочих дня):

  • РАБДЕНЬ(A2; B2) вернёт 22.
  • 22 / 21 ≈ 1,047 → округлённо 1 месяц.

Для более точного расчёта замените 21 на фактическое среднее количество рабочих дней в месяце для вашего региона (например, в России это ~20,8 дней с учётом праздников).

⚠️ Внимание: Функция РАБДЕНЬ не учитывает региональные праздники (например, 8 марта или 1 мая). Чтобы их исключить, добавьте третий аргумент с диапазоном праздничных дат: =РАБДЕНЬ.МЕЖД(A2; B2; Праздники!A2:A10).

Метод 5: Динамический расчёт с учётом текущей даты

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

= DATEDIF(A2; СЕГОДНЯ(); "m")

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

  1. Вставьте формулу в нужную ячейку.
  2. Перейдите в Файл → Параметры → Формулы.
  3. Установите переключатель Автоматически в разделе Параметры вычислений.

Для учёта будущих дат (например, до конца года) используйте:

= DATEDIF(СЕГОДНЯ(); ДАТА(ГОД(СЕГОДНЯ())+1; 1; 1); "m")

Эта формула вернёт количество месяцев до 1 января следующего года.

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

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

  • 🗓️ Текст вместо даты: Если ячейка содержит текст (например, "01.01.2023" вместо даты), формулы вернут ошибку. Исправьте формат через Формат ячеек → Дата или функцию ДАТАЗНАЧ:
  • = DATEDIF(ДАТАЗНАЧ(A2); ДАТАЗНАЧ(B2); "m")
  • 🔄 Обратный порядок дат: DATEDIF не работает, если начальная дата позже конечной. Используйте =ABS(DATEDIF(...)) или проверку:
  • = ЕСЛИ(A2>B2; DATEDIF(B2; A2; "m"); DATEDIF(A2; B2; "m"))
  • 📊 Неучтённые високосные годы: Функции DATEDIF и YEAR/MONTH автоматически учитывают високосные годы (например, февраль 2026 имеет 29 дней), но если вы вручную вычитаете дни, могут возникнуть ошибки.

Чтобы проверить корректность расчётов, используйте альтернативный метод. Например, сравните результат DATEDIF с ручным подсчётом:

= (Б2 - А2) / 30

Эта формула вернёт приблизительное количество месяцев (30 дней ≈ 1 месяц). Если результаты сильно отличаются, значит, в данных есть ошибка.

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

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

Да, но стандартных функций для этого нет. Используйте комбинацию РАБДЕНЬ и деления на среднее количество рабочих дней в месяце (например, =РАБДЕНЬ(A2; B2)/21). Для точности создайте таблицу с праздничными днями и укажите её в третьем аргументе РАБДЕНЬ.МЕЖД.

Почему DATEDIF возвращает #ЧИСЛО!?

Ошибка #ЧИСЛО! возникает в трёх случаях:

  1. Начальная дата позже конечной (используйте =ABS(DATEDIF(...))).
  2. Один из аргументов не является датой (проверьте формат ячейки).
  3. Некорректный третий аргумент (допустимы только "y", "m", "d", "ym", "yd", "md").
Как посчитать месяцы между датами в Google Таблицах?

В Google Sheets функция DATEDIF работает аналогично, но есть нюанс: если даты в текстовом формате, используйте =DATEDIF(ДАТАЗНАЧ(A2); ДАТАЗНАЧ(B2); "m"). Также можно применять = (YEAR(B2)-YEAR(A2))*12 + MONTH(B2) - MONTH(A2).

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

Да, но потребуется пользовательская функция на VBA или сложная формула с СУММПРОИЗВ и ДЕНЬНЕД. Например, чтобы посчитать месяцы, учитывая только понедельники и пятницы:

= СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ДВССЫЛ($A$1:ИНДЕКС($A:$A; Б2-А2)))-1)=1); --(ДЕНЬНЕД(...)<=5)) / 8,6

Где 8,6 — среднее количество понедельников и пятниц в месяце.

Как вычесть из даты N месяцев?

Используйте функцию ДАТАМЕС (или EDATE в английской версии):

= ДАТАМЕС(А2; -3)

Эта формула вернёт дату на 3 месяца раньше, чем в ячейке A2. Для добавления месяцев используйте положительное число: =ДАТАМЕС(А2; 6).