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

Почему стандартное вычитание дат в Excel даёт неверный результат

Вы когда-нибудь пытались просто вычесть одну дату из другой в Microsoft Excel, ожидая получить количество месяцев, но вместо этого видели странное число вроде 456,32? Это классическая ловушка для новичков. Дело в том, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), где 1 день = 1 единица. Когда вы вычитаете Дата2 - Дата1, программа возвращает разницу в днях, а не в месяцах.

Но что если вам нужно узнать, сколько полных месяцев прошло между 15.01.2023 и 20.03.2026? Или сколько лет и месяцев работает сотрудник в компании? Стандартное вычитание здесь бесполезно. К счастью, в Excel есть специализированные функции, которые решают эту задачу — главное знать их синтаксис и нюансы.

Способ 1: Функция DATEDIF (РАЗНДАТ) — универсальный инструмент

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

Базовый синтаксис:

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

Пример: чтобы узнать, сколько месяцев прошло между 01.06.2023 и 15.11.2023, введите:

=РАЗНДАТ("01.06.2023"; "15.11.2023"; "m")

Результат: 5 месяцев (даже если дни не совпадают!).

  • ✅ Работает во всех версиях Excel, включая Excel 365 и Excel 2019
  • ✅ Учитывает високосные годы
  • ⚠️ Не отображается в мастере функций — нужно вводить вручную
  • ⚠️ Чувствительна к порядку дат: если конечная дата раньше начальной, вернёт ошибку #ЧИСЛО!
⚠️ Внимание: Если вы используете Excel для Mac, функция DATEDIF может вести себя нестабильно в формате "md" (разница в днях без учёта месяцев). В этом случае используйте альтернативные методы.
📊 Какой версией Excel вы пользуетесь?
Excel 365
Excel 2019
Excel 2016
Excel для Mac
Другая

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

Если функция DATEDIF вам не нравится (например, из-за её "скрытости"), можно обойтись стандартными функциями YEAR (ГОД) и MONTH (МЕСЯЦ). Этот метод даёт тот же результат, но требует немного больше усилий.

Формула:

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

Пример для дат 10.04.2022 и 05.09.2023:

=((ГОД("05.09.2023")-ГОД("10.04.2022"))*12) + (МЕСЯЦ("05.09.2023")-МЕСЯЦ("10.04.2022"))

Результат: 17 месяцев.

Начальная дата Конечная дата Формула DATEDIF Формула YEAR+MONTH Результат (месяцев)
01.01.2023 31.12.2023 =РАЗНДАТ(A2;B2;"m") =((ГОД(B2)-ГОД(A2))*12)+(МЕСЯЦ(B2)-МЕСЯЦ(A2)) 11
15.02.2023 15.02.2026 =РАЗНДАТ(A3;B3;"m") =((ГОД(B3)-ГОД(A3))*12)+(МЕСЯЦ(B3)-МЕСЯЦ(A3)) 12
30.06.2023 01.07.2023 =РАЗНДАТ(A4;B4;"m") =((ГОД(B4)-ГОД(A4))*12)+(МЕСЯЦ(B4)-МЕСЯЦ(A4)) 0
⚠️ Внимание: Если конечная дата приходится на более ранний день месяца, чем начальная (например, 30.01.2023 и 15.02.2023), формула YEAR+MONTH может дать неточный результат. В таких случаях добавьте корректировку с помощью функции ЕСЛИ.

Способ 3: Функция YEARFRAC для дробных месяцев

Что если вам нужно узнать не только целое количество месяцев, но и их дробную часть? Например, для расчёта амортизации или процентов по кредиту. Здесь на помощь придёт функция YEARFRAC (ДОЛЯГОДА), которая возвращает разницу между датами в годах (включая дробную часть). Чтобы перевести результат в месяцы, умножьте его на 12.

Синтаксис:

=ДОЛЯГОДА(начальная_дата; конечная_дата; [базис])*12

Пример для дат 01.01.2023 и 15.03.2023:

=ДОЛЯГОДА("01.01.2023"; "15.03.2023")*12

Результат: 2,45 месяцев (где 0,45 — это доля марта).

  • 🔹 Параметр [базис] определяет способ расчёта (по умолчанию = 0). Для точности используйте 1 (фактическое количество дней в месяце).
  • 🔹 Подходит для финансовых расчётов, где важна точность до дня
  • ⚠️ Результат может немного отличаться от DATEDIF из-за разных методов округления
Какой базис выбрать в YEARFRAC?

0 или опустить — американский метод (30/360), 1 — фактическое количество дней, 2 — 30 дней в месяце / 360 в году, 3 — 30/365, 4 — европейский метод (фактический/360). Для большинства задач подходит 1.

Способ 4: Использование EDATE для последовательных месяцев

Функция EDATE (ДАТАМЕС) добавляет заданное количество месяцев к дате. Её можно использовать "в обратную сторону", чтобы найти разницу. Например, если вы хотите узнать, сколько месяцев нужно прибавить к начальной дате, чтобы получить конечную.

Формула:

=ДАТАМЕС(начальная_дата; количество_месяцев) = конечная_дата

Но как это применить для расчёта разницы? Вот хитрость: используйте функцию ПОИСКПОЗ в массиве дат, сгенерированных EDATE. Однако это сложно реализовать без VBA. Вместо этого проще использовать EDATE для проверки:

Пример: чтобы проверить, прошло ли ровно 6 месяцев с 15.05.2023, введите:

=ЕСЛИ(ДАТАМЕС("15.05.2023";6)="15.11.2023";"Да";"Нет")
  • ✅ Полезно для проверки краевых случаев (например, конец февраля)
  • ✅ Учитывает разную длину месяцев
  • ⚠️ Не подходит для прямого расчёта разницы — только для верификации

Способ 5: Power Query для обработки больших массивов дат

Если вам нужно посчитать месяцы между датами для тысяч строк (например, в отчёте по сотрудникам или контрактам), ручной ввод формул займёт вечность. Здесь на помощь придёт Power Query — инструмент для преобразования данных, встроенный в Excel 2016 и новее.

Алгоритм действий:

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

(где 30.44 — среднее количество дней в месяце).

  1. Замените заголовок столбца на "Месяцев".
  2. Нажмите Закрыть и загрузить.

Преимущество этого метода — обработка миллионов строк за секунды, а также возможность дополнительной очистки данных (например, удаление пустых ячеек).

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

Проверить отсутствие пустых ячеек

Объединить данные в таблицу (Ctrl+T)

Запомнить названия столбцов с датами-->

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

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

  1. Даты в текстовом формате: Если ячейка с датой отформатирована как текст (например, после импорта из CSV), Excel воспринимает её как строку. Исправляйте формат через Формат ячеекДата.
  2. Неучтённые високосные годы: Функции DATEDIF и YEARFRAC корректно обрабатывают 29 февраля, но если вы используете самописные формулы, проверьте их на датах вроде 28.02.2023 и 28.02.2026.
  3. Округление дробных месяцев: При использовании YEARFRAC решите заранее, нужно ли вам округление (вверх, вниз или до ближайшего целого). Используйте функции ОКРУГЛ, ОКРУГЛВВЕРХ или ОКРУГЛВНИЗ.

Критическая ошибка: если в формуле DATEDIF перепутать порядок дат (поставить конечную дату первой), Excel не выдаст ошибку, а вернёт отрицательное число месяцев. Всегда проверяйте порядок аргументов!

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

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

Да, но стандартными функциями Excel это сделать сложно. Вам понадобится:

  1. Посчитать общее количество дней между датами (=КонечнаяДата - НачальнаяДата).
  2. Вычесть выходные и праздники с помощью функции ЧИСТРАБДНИ.
  3. Перевести оставшиеся дни в месяцы, разделив на среднее количество рабочих дней в месяце (~21).

Для точности лучше использовать VBA или Power Query.

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

Это происходит в трёх случаях:

  • Конечная дата раньше начальной.
  • Одна из дат не является корректной датой Excel (например, текст или число за пределами диапазона дат Excel).
  • Используется несуществующая дата (например, 31.04.2023).

Проверьте формат ячеек и корректность дат.

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

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

  • Синтаксис: =DATEDIF(A1; B1; "m") (разделитель — точка с запятой или запятая, в зависимости от локали).
  • Поддерживаются те же параметры: "y" (годы), "m" (месяцы), "d" (дни).
  • Для дробных месяцев используйте =YEARFRAC(A1; B1)*12.
Можно ли посчитать месяцы с учётом только полных лет?

Да, для этого:

  1. Посчитайте полные годы: =РАЗНДАТ(A1; B1; "y").
  2. Умножьте на 12, чтобы получить месяцы: =РАЗНДАТ(A1; B1; "y")*12.
  3. Добавьте оставшиеся месяцы: =РАЗНДАТ(A1; B1; "y")*12 + РАЗНДАТ(ДАТА(ГОД(A1)+РАЗНДАТ(A1; B1; "y"); МЕСЯЦ(A1); ДЕНЬ(A1)); B1; "m").

Эта формула вернёт количество месяцев, игнорируя неполные годы.