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

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

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

Проблема усложняется неравномерной продолжительностью месяцев (28-31 день) и високосными годами. Например, разница между 31 января и 1 марта технически составляет 29 дней, но по календарю это ровно 1 месяц. Здесь требуются специальные функции, которые учитывают календарную логику, а не просто арифметические операции.

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

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

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

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

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

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

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

  • 📅 "Y" — полные годы между датами
  • 📆 "D" — полные дни (игнорируя месяцы/годы)
  • 📊 "YM" — месяцы без учёта полных лет
  • 🔄 "MD" — дни без учёта полных месяцев/лет

Пример: чтобы посчитать месяцы между 15.03.2023 и 20.07.2026, используйте:

=DATEDIF("15.03.2023"; "20.07.2026"; "M")

Результат: 16 месяцев (включая неполный июль 2026).

⚠️ Внимание: Функция DATEDIF всегда округляет в меньшую сторону. Например, разница между 31.01.2023 и 01.03.2023 составит 1 месяц, хотя фактически прошло 28/29 дней. Для точного расчёта с дробными месяцами используйте метод 3.

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

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

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

Разберём на примере дат 10.05.2023 и 05.11.2026:

  1. Разница в годах: 2026 - 2023 = 11 * 12 = 12 месяцев.
  2. Разница в месяцах: 11 - 5 = 6 месяцев.
  3. Итог: 12 + 6 = 18 месяцев.

Преимущество этого метода — он не зависит от дней в месяце и всегда возвращает целое число. Однако он не учитывает неполные месяцы. Например, разница между 30.01.2023 и 01.02.2023 будет 0, хотя прошёл 1 день.

Начальная дата Конечная дата DATEDIF ("M") YEAR+MONTH Пояснение
15.01.2023 15.02.2023 1 1 Полный месяц
31.01.2023 01.03.2023 1 1 DATEDIF округляет вниз
15.12.2023 10.01.2026 0 1 YEAR+MONTH считает календарно

Метод 3: YEARFRAC для дробных месяцев

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

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

Параметр 1 указывает метод расчёта:

  • 📌 0 или опущен — американский метод (30/360)
  • 📌 1 — фактическое количество дней в месяце/году
  • 📌 2 — 30 дней в месяце, 360 в году
  • 📌 3 — 30/365
  • Пример: разница между 01.01.2023 и 16.03.2023:

    =YEARFRAC("01.01.2023"; "16.03.2023"; 1) * 12  →  2.48 месяца
    ⚠️ Внимание: Функция YEARFRAC может давать неожиданные результаты при пересечении високосных годов. Например, разница между 28.02.2023 и 28.02.2026 составит 12 месяцев, а между 29.02.2020 и 28.02.2021 — 11.97 месяцев.
    Как избежать ошибок с високосными годами?

    Используйте параметр 1 в YEARFRAC для точного расчёта по календарным дням. Если нужны целые месяцы, комбинируйте с функцией ROUNDUP или ROUNDDOWN.

    Метод 4: Формула для неполных месяцев с учётом дней

    Чтобы посчитать месяцы с учётом дней (например, 1 месяц и 15 дней = 1.5 месяца), используйте комбинированную формулу:

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

    Для более точного результата с дробной частью:

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

    Пример: разница между 15.04.2023 и 10.05.2023:

    • 📅 Полных месяцев: 0 (апрель → май)
    • 📅 Дней: 10 - 15 = -5 → учитываем как 25 дней (30 - 5)
    • 📅 Итог: 0 + 25/30 = 0.83 месяца

    Убедитесь, что даты введены как даты (не текст)|Проверьте порядок дат (начальная < конечной)|Учтите високосные годы при точных расчётах|Тестируйте формулу на крайних случаях (конец/начало месяца)

    -->

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

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

    =DATEDIF(начальная_дата; конечная_дата; "M") - (NETWORKDAYS(конечная_дата; начальная_дата) / 22)

    Где 22 — среднее количество рабочих дней в месяце (может варьироваться в зависимости от страны).

    Для России с её официальными праздниками формула усложняется. Сначала создайте список праздничных дат в отдельном диапазоне (например, D2:D20), затем используйте:

    = (YEARFRAC(начальная_дата; конечная_дата; 1)  12)  (NETWORKDAYS(начальная_дата; конечная_дата; D2:D20) / NETWORKDAYS(начальная_дата; конечная_дата))

    Пример: разница между 01.01.2026 (Новый год) и 31.01.2026:

    • 📅 Календарных дней: 30 → 1 месяц
    • 📅 Рабочих дней: 21 (исключая 1-8 января)
    • 📅 Рабочих месяцев: 1 * (21 / 22) ≈ 0.95

    Обработка ошибок и особенные случаи

    При работе с датами в Excel часто возникают ошибки, связанные с некорректным форматом данных или логическими противоречиями. Вот типичные проблемы и их решения:

    1. Ошибка #ЗНАЧ!: Возникает, если ячейка содержит текст вместо даты. Используйте =ДАТАЗНАЧ(текст) для преобразования, например: =ДАТАЗНАЧ("15.05.2023").
    2. Ошибка #ЧИСЛО!: Появляется при неверном порядке дат (начальная > конечная). Добавьте проверку:
      =ЕСЛИ(A2>B2; DATEDIF(B2; A2; "M"); DATEDIF(A2; B2; "M"))
    3. Неправильный результат для 31-го числа: Если конечная дата — 31-е число, а в конечном месяце 30 дней, Excel автоматически сдвигает дату на 30-е. Чтобы избежать этого, используйте:
      =ЕСЛИ(ДЕНЬ(конечная_дата)=31; ДАТА(ГОД(конечная_дата); МЕСЯЦ(конечная_дата)+1; 0); конечная_дата)

    Для обработки пустых ячеек добавьте проверку ЕСЛИ:

    =ЕСЛИ(ИЛИ(ЕПУСТО(A2); ЕПУСТО(B2)); ""; DATEDIF(A2; B2; "M"))

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

    Как посчитать месяцы между датами, если в одной из ячеек текст (например, "январь 2023")?

    Используйте комбинацию функций ДАТАЗНАЧ и ПОИСК для преобразования текста в дату. Пример:

    =DATEDIF(ДАТАЗНАЧ("1."&ПРАВСИМВ(A2;3)&".2023"); B2; "M")

    Где A2 содержит "январь 2023". Функция ПРАВСИМВ(A2;3) извлекает "янв", а ДАТАЗНАЧ преобразует в дату 1 января.

    Почему функция DATEDIF возвращает неточный результат для дат с 31-м числом?

    Функция DATEDIF автоматически корректирует несуществующие даты. Например, если начальная дата — 31.01.2023, а конечная — 30.04.2023, Excel посчитает разницу до 30.01.2023 (3 месяца), а не до 30.04.2023. Чтобы избежать этого, используйте формулу из Метода 4 с учётом дней.

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

    Замените одну из дат на СЕГОДНЯ(). Пример для расчёта месяцев до конца проекта:

    =DATEDIF(СЕГОДНЯ(); "31.12.2026"; "M")

    Чтобы результат автоматически обновлялся, используйте СЕГОДНЯ() без фиксированных дат.

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

    Да, но для этого потребуется комбинировать DATEDIF с NETWORKDAYS (см. Метод 5). Для точности создайте отдельный список праздничных дней в вашей стране и укажите его в формуле как третий аргумент.

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

    Используйте функцию ОКРУГЛВВЕРХ с результатом YEARFRAC:

    =ОКРУГЛВВЕРХ(YEARFRAC(A2; B2; 1) * 12; 0)

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