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

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

Вы когда-нибудь пытались просто вычесть одну дату из другой в Excel, чтобы получить количество месяцев, и получали странные числа вроде 43831? Это происходит потому, что Excel хранит даты как последовательные числа, где 1 соответствует 1 января 1900 года. Когда вы вычитаете 15.03.2023 - 10.01.2022, программа возвращает разницу в днях (420), а не в месяцах.

Ещё одна ловушка: если использовать простую формулу =МЕСЯЦ(конечная_дата) - МЕСЯЦ(начальная_дата), вы получите разницу только между номерами месяцев (например, март - январь = 2), полностью игнорируя годы. Такой подход даст сбой уже при переходе через новый год. Например, между 31.12.2022 и 01.01.2023 по этой логике будет 1 месяц, хотя на самом деле прошёл всего 1 день.

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

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

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

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

=РАЗНДАТ(начальная_дата; конечная_дата; "M")

Где "M" — это код для вычисления полных месяцев. Другие варианты:

  • 📅 "Y" — полные годы
  • 📆 "D" — полные дни
  • 📅 "YM" — месяцы без учёта годов
  • 📆 "MD" — дни без учёта месяцев и годов
  • 📅 "YD" — дни без учёта годов

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

=РАЗНДАТ("15.05.2022"; "20.11.2023"; "M")

Результат: 18 (полных месяцев).

⚠️ Внимание: Функция РАЗНДАТ всегда округляет результат в меньшую сторону. Если между датами прошло 18 месяцев и 29 дней, вы получите 18, а не 19. Для точного подсчёта с округлением используйте комбинацию с ДРОБН.ГОД (см. Способ 3).
📊 Какой способ подсчёта месяцев вы используете чаще?
Ручной подсчёт
Функция РАЗНДАТ
Формулы с ДРОБН.ГОД
Другие функции
Не знаю, как это делать

Способ 2: Комбинация ГОД и МЕСЯЦ для точного расчёта

Если функция РАЗНДАТ вам не подходит (например, в Excel Online она может работать нестабильно), используйте универсальную формулу:

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

Разберём, как это работает:

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

Пример для дат 10.02.2022 и 15.07.2023:

= (2023 - 2022) * 12 + 7 - 2 = 17

Эта формула учитывает переходы через новый год, но не корректирует результат, если день конечной даты меньше дня начальной. Например, между 31.01.2023 и 28.02.2023 будет 1 месяц, хотя фактически прошло 28 дней.

Убедитесь, что обе даты введены как даты (не текст)

Проверьте формат ячеек (должен быть "Дата")

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

Сравните результат с функцией РАЗНДАТ для точности

-->

Способ 3: ДРОБН.ГОД (YEARFRAC) для дробных месяцев

Если вам нужно получить точную разницу в месяцах с дробной частью (например, 3.5 месяца), используйте функцию ДРОБН.ГОД:

=ДРОБН.ГОД(начальная_дата; конечная_дата; 1) * 12

Аргумент 1 указывает метод расчёта (по фактическим дням). Другие варианты:

База Описание Пример для 31.01-28.02
0 или опущено Американский метод (30/360) 0.90 месяца
1 Фактическое количество дней 0.97 месяца
2 Фактические дни, год = 360 0.95 месяца
3 Фактические дни, год = 365 0.96 месяца
4 Европейский метод (30/360) 0.92 месяца

Чтобы округлить результат до целых месяцев, оберните формулу в ОКРУГЛ:

=ОКРУГЛ(ДРОБН.ГОД(A1; B1; 1) * 12; 0)

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

Чтобы неполные месяцы округлялись в большую сторону (например, 1 месяц и 1 день = 2 месяца), используйте эту формулу:

=ЕСЛИ(ДЕНЬ(конечная_дата)>=ДЕНЬ(начальная_дата); РАЗНДАТ(начальная_дата; конечная_дата; "M"); РАЗНДАТ(начальная_дата; конечная_дата; "M") + 1)

Логика:

  • 🔢 Если день конечной даты больше или равен дню начальной даты → берём разницу в полных месяцах.
  • 🔢 Если день конечной даты меньше → добавляем 1 к результату (округление вверх).

Пример: между 15.03.2023 и 10.04.2023:

  • Разница в полных месяцах: 0 (так как 10.04 < 15.04).
  • Формула вернёт 1 (округление вверх).
⚠️ Внимание: Эта формула может давать неожиданные результаты при работе с датами в разных временных зонах или если одна из дат — 29 февраля в високосном году. Для критических расчётов (например, финансовых) используйте ДРОБН.ГОД с базой 1.

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

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

  1. Выделите таблицу с датами.
  2. Перейдите на вкладку ДанныеИз таблицы/диапазона.
  3. В редакторе Power Query добавьте пользовательский столбец с формулой:
    = Date.From([КонечнаяДата]) - Date.From([НачальнаяДата])
  4. Преобразуйте результат в месяцы, добавив ещё один столбец:
    = Number.RoundDown(Date.Days([Разница]) / 30.44; 0)

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

Преимущества этого метода:

  • ⚡ Обрабатывает миллионы строк без тормозов.
  • 🔄 Легко обновляется при изменении исходных данных.
  • 📊 Позволяет добавлять дополнительные вычисления (например, годы + месяцы).
Как учесть високосные годы в Power Query?

В Power Query нет встроенной функции для високосных годов, но вы можете добавить пользовательский столбец с проверкой:

= if Date.IsLeapYear(Date.Year([ВашаДата])) then "Високосный" else "Обычный"

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

Частые ошибки и как их избежать

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

  1. Текст вместо дат: Если ячейка содержит "15.05.2023" как текст (выровнено по левому краю), Excel не распознаёт её как дату. Исправляйте формат через Формат ячеек → Дата или функцию ДАТАЗНАЧ.
  2. Неучтённые временные зоны: Excel не хранит информацию о временных зонах. Если ваши даты пришли из разных источников (например, UTC и местное время), сначала приведите их к одному стандарту.
  3. Округление вниз по умолчанию: Большинство функций (включая РАЗНДАТ) округляют месяцы в меньшую сторону. Если вам нужно округление вверх, используйте формулы из Способа 4.
  4. Игнорирование високосных лет: 29 февраля может "исчезать" при вычитании дат. Например, 29.02.2020 - 28.02.2019 = 366 дней, но РАЗНДАТ вернёт 12 месяцев, хотя фактически прошёл 1 год и 1 день.

Чтобы проверить, правильно ли Excel интерпретирует ваши даты, используйте функцию ДАТАЗНАЧ:

=ДАТАЗНАЧ("15.05.2023")

Если результат — ошибка #ЗНАЧ!, значит формат неверный.

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

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

Да, в Google Sheets работают те же функции, что и в Excel:

  • =DATEDIF(A1; B1; "M") — аналог РАЗНДАТ.
  • =YEARFRAC(A1; B1; 1)*12 — аналог ДРОБН.ГОД.

Отличие: в Google Таблицах DATEDIF отображается в списке функций (в отличие от Excel).

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

Используйте комбинацию функций:

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

Для точности создайте отдельную таблицу с календарём рабочих дней вашей компании.

Почему моя формула возвращает отрицательное число?

Это происходит, если начальная дата позже конечной. Например:

=РАЗНДАТ("15.06.2023"; "10.05.2023"; "M")

Результат: -1.

Решения:

  • Поменяйте даты местами.
  • Используйте АБС для абсолютного значения: =АБС(РАЗНДАТ(...)).
  • Добавьте проверку: =ЕСЛИ(РАЗНДАТ(...)<0; 0; РАЗНДАТ(...)).
Как посчитать месяцы и годы отдельно?

Используйте РАЗНДАТ с разными кодами:

  • Годы: =РАЗНДАТ(A1; B1; "Y").
  • Месяцы без учёта годов: =РАЗНДАТ(A1; B1; "YM").
  • Дни без учёта месяцев и годов: =РАЗНДАТ(A1; B1; "MD").

Чтобы вывести результат в формате "X лет Y месяцев", комбинируйте функции с ТЕКСТ:

=ТЕКСТ(РАЗНДАТ(A1; B1; "Y"); "0") & " лет " & ТЕКСТ(РАЗНДАТ(A1; B1; "YM"); "0") & " месяцев"
Можно ли посчитать месяцы между датами в Excel для Mac?

Да, все описанные методы работают в Excel для Mac, включая РАЗНДАТ. Единственное отличие:

  • В некоторых версиях Excel для Mac функция РАЗНДАТ может не распознаваться при ручном вводе. В этом случае используйте DATEDIF (английское название).
  • Формат дат по умолчанию может отличаться (например, ММ/ДД/ГГГГ вместо ДД.ММ.ГГГГ). Проверяйте настройки в Параметры Excel → Язык.