Как вычесть одну дату из другой в Excel и получить результат в месяцах

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

Вы когда-нибудь пытались в Microsoft Excel вычесть одну дату из другой, ожидая получить разницу в месяцах, но вместо этого видели странное число вроде 456,78? Это не ошибка программы — так работает внутренняя логика Excel. Дело в том, что по умолчанию программа оперирует датами как числовыми значениями, где 1 день = 1 единица, а месяцы и годы автоматически конвертируются в дни. Например, разница между 01.01.2026 и 01.03.2026 для Excel — это 60 дней, а не 2 месяца.

Но что если вам нужно именно количество полных или календарных месяцев? Например, для расчёта стажа сотрудников, срока действия договоров или амортизации оборудования? Здесь требуются специальные формулы — и их в Excel целых пять! Каждая из них решает свою задачу: от простого подсчёта целых месяцев до учёта неполных периодов с округлением. В этой статье разберём все варианты — от базовых до продвинутых, — а также типичные ошибки, которые портят результаты.

Предупреждение заранее: если вы работаете с датами в формате дд.мм.гггг, убедитесь, что ячейки имеют именно формат даты, а не текстовый. Иначе Excel воспримет 01.03.2026 как обычную строку, и никакие формулы не сработают. Проверить это просто: выделите ячейку и посмотрите на формат в панели инструментов (должно быть что-то вроде Дата или Краткая дата).

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

Способ 1: Функция DATEDIF — скрытый инструмент для точного расчёта

Функция DATEDIF (от англ. Date Difference) — это самый универсальный, но парадоксально малоизвестный метод. Она существует в Excel ещё с версии Lotus 1-2-3, но Microsoft никогда официально не документировала её в справочной системе. Тем не менее, DATEDIF работает во всех версиях программы, включая Excel 365 и Excel 2021.

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

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

Где единица_измерения может принимать следующие значения:

  • 📅 "m" — количество полных месяцев между датами (игнорирует дни). Например, разница между 15.01.2026 и 10.03.2026 будет 2 месяца, даже если фактически прошло 54 дня.
  • 📆 "d" — количество дней (аналог простого вычитания).
  • 📈 "y" — количество полных лет.
  • 🔄 "ym" — количество месяцев свыше полных лет. Например, для периода в 1 год и 3 месяца вернёт 3.
  • 📊 "md" — количество дней свыше полных месяцев.

Пример использования для подсчёта месяцев:

=DATEDIF("01.01.2026"; "31.03.2026"; "m")

Результат: 3 (несмотря на то, что фактически между этими датами 89 дней).

⚠️ Внимание: Если начальная_дата позже конечной_даты, функция вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, используйте ЕСЛИОШИБКА:

=ЕСЛИОШИБКА(DATEDIF(A1; B1; "m"); "Дата окончания раньше начальной")

Способ 2: Формула с ГОД и МЕСЯЦ — для гибкого учёта неполных периодов

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

Базовая формула:

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

Пример:

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

Результат: 2 (потому что дни месяца игнорируются).

Но что если нужно учитывать дни? Например, чтобы разница между 15.01.2026 и 16.02.2026 считалась как 1 полный месяц? Тогда формулу нужно модифицировать:

= ЕСЛИ(ДЕНЬ(конечная_дата) >= ДЕНЬ(начальная_дата);

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

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

Убедитесь, что обе даты в формате даты, а не текста|

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

Учтите, что функция ДЕНЬ() возвращает день месяца (1-31)|

Для отрицательных разниц используйте АБС()-->

Способ 3: Использование РАЗНДАТ — альтернатива DATEDIF для новых версий Excel

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

Синтаксис:

=РАЗНДАТ(начальная_дата; конечная_дата; [формат_возврата])

Чтобы преобразовать дни в месяцы, нужно разделить результат на 30,44 (среднее количество дней в месяце с учётом високосных годов):

=РАЗНДАТ(A1; B1) / 30,44

Но этот метод даёт приблизительное значение. Например:

Начальная датаКонечная датаРАЗНДАТ / 30,44DATEDIF("m")
01.01.202631.01.20261,020
01.01.202601.02.20261,001
15.01.202615.03.20262,002

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

=ОКРУГЛ(РАЗНДАТ(A1; B1) / 30,44; 0)

Но помните, что округление вверх (ОКРУГЛВВЕРХ) может завысить результат на 1 месяц для пограничных дат (например, 29.01-28.02).-->

Способ 4: Формула массива для учёта високосных годов и точных календарных месяцев

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

Формула:

=СУММ(

--(ГОД(ДАТАМЕС(начальная_дата; СТРОКА(ДИАПАЗОН(1; РАЗНДАТ(начальная_дата; конечная_дата; "m"))); 1)) <= ГОД(конечная_дата));

--(МЕСЯЦ(ДАТАМЕС(начальная_дата; СТРОКА(ДИАПАЗОН(1; РАЗНДАТ(начальная_дата; конечная_дата; "m"))); 1)) <= МЕСЯЦ(конечная_дата))

) - 1

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

  1. Функция РАЗНДАТ(..., "m") считает количество полных месяцев между датами.
  2. ДАТАМЕС генерирует последовательность дат, сдвигая начальную дату на 1, 2, 3... месяцев.
  3. СТРОКА(ДИАПАЗОН(...)) создаёт массив чисел от 1 до количества месяцев.
  4. Сравниваются годы и месяцы с конечной датой, результат преобразуется в 1/0 с помощью --.
  5. СУММ складывает все единицы и вычитает 1 (корректировка).

Пример для дат 15.01.2026 и 10.04.2026:

  • 📌 РАЗНДАТ вернёт 3 месяца.
  • 📌 ДАТАМЕС сгенерирует даты: 15.02.2026, 15.03.2026, 15.04.2026.
  • 📌 Сравнение покажет, что только первые две даты ≤ 10.04.2026.
  • 📌 Итог: 2 полных месяца (январь-февраль + март, но апрель неполный).
⚠️ Внимание: Эта формула требует ввода как формула массива (в старых версиях Excel нажимайте Ctrl+Shift+Enter). В Excel 365 и Excel 2019 она работает без дополнительных действий.

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

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

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

  1. Выделите таблицу с датами и нажмите Данные → Из таблицы/диапазона (или Get & Transform Data → From Table/Range в англоязычной версии).
  2. В открывшемся редакторе Power Query добавьте новый столбец: Добавить столбец → Пользовательский столбец.
  3. Введите формулу:
    = Date.From([Конечная дата]) - Date.From([Начальная дата])

    Это даст разницу в днях.

  4. Добавьте ещё один столбец с формулой для месяцев:
    = Number.RoundDown(Date.MonthsBetween([Конечная дата], [Начальная дата], "dd"))

    Здесь "dd" указывает, что дни игнорируются.

  5. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

Преимущества Power Query:

  • ⚡ Обрабатывает миллионы строк без тормозов.
  • 🔄 Легко обновляется при изменении исходных данных (правый клик по таблице → Обновить).
  • 📊 Позволяет добавлять дополнительные вычисления (например, классификацию по срокам).
Как обработать даты в формате "январь 2026"

Если ваши даты записаны как текст (например, "январь 2026"), сначала преобразуйте их в формат даты в Power Query:

1. Выделите столбец → Преобразовать → Формат → Дата.

2. Если не сработало, используйте Добавить столбец → Из текста по диапазону с разделителем пробела, затем объедините месяц и год в дату через Дата.ИзТекста.

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

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

  1. Текст вместо даты: Если вы импортировали данные из внешнего источника (например, 1C или PDF), даты могут оказаться в текстовом формате. Проверить это можно с помощью функции ТИП:
    =ТИП(A1)  // Вернёт 16 для текста или 1 для числа

    Решение: используйте ДАТАЗНАЧ или Power Query для преобразования.

  2. Неучтённые високосные годы: Функции вроде РАЗНДАТ / 30,44 дадут погрешность для периодов, пересекающих 29 февраля. Например, разница между 28.02.2023 и 28.02.2026 по этой формуле будет ~12,07 месяцев вместо 12.
  3. Отрицательные результаты: Если поменять даты местами, DATEDIF вернёт ошибку, а другие формулы могут дать отрицательное число. Используйте АБС или ЕСЛИ для защиты:
    =ЕСЛИ(A1 > B1; DATEDIF(B1; A1; "m"); DATEDIF(A1; B1; "m"))
  4. Проблемы с временными зонами: Если даты содержат время (например, 01.01.2026 14:30), его нужно обнулить с помощью ЦЕЛОЕ:
    =DATEDIF(ЦЕЛОЕ(A1); ЦЕЛОЕ(B1); "m")
ОшибкаПримерРешение
Текстовый формат"01.01.2026" (в кавычках)=ДАТАЗНАЧ(A1)
Перепутанные датыDATEDIF("31.12.2026"; "01.01.2026"; "m")=ЕСЛИОШИБКА(DATEDIF(...); "Ошибка порядка дат")
Високосный годРазница 28.02.202001.03.2020Используйте DATEDIF с "m"

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

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

Да, но это требует комбинации функций. Сначала рассчитайте разницу в днях с помощью РАЗНДАТ, затем исключите выходные и праздники:

=РАЗНДАТ(A1; B1) - ЧИСТРАБДНИ(A1; B1; [список_праздников])

Чтобы перевести дни в месяцы, разделите результат на 21,7 (среднее количество рабочих дней в месяце).

Почему DATEDIF не работает в моём Excel?

Причины могут быть следующими:

  • 🔹 Вы используете Excel для Mac — в некоторых версиях функция отключена. Попробуйте обновить программу.
  • 🔹 Даты в текстовом формате. Преобразуйте их с помощью ДАТАЗНАЧ.
  • 🔹 Опечатка в аргументе "m" (например, русская "м" вместо английской).

Альтернатива: используйте формулу с ГОД и МЕСЯЦ, описанную в Способе 2.

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

Если у вас, например, дата рождения 1990 (без дня и месяца), допишите условные значения:

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

Для точности лучше использовать середину года:

=DATEDIF(ДАТА(1990; 6; 15); СЕГОДНЯ(); "m")
Можно ли автоматически обновлять разницу при изменении дат?

Да, если использовать динамические массивыExcel 365) или Power Query. Например:

  1. Создайте таблицу с датами (Ctrl+T).
  2. Добавьте столбец с формулой =DATEDIF([@[Дата1]]; [@[Дата2]]; "m").
  3. Теперь при изменении данных в таблице формула будет пересчитываться автоматически.
Как вычесть месяцы из даты (а не наоборот)?

Для этого используйте функцию ДАТАМЕС:

=ДАТАМЕС("31.03.2026"; -2)  // Вернёт 28.01.2026 (автоматически корректирует дни)

Если нужно вычесть месяцы с учётом точной даты (например, всегда 15-е число), используйте:

=ЕДАТА(ДАТА(ГОД(A1); МЕСЯЦ(A1) - 2; ДЕНЬ(A1)))