Почему простой вычитание дат в Excel не даёт месяцы — и что делать
Вы когда-нибудь пытались в Microsoft Excel вычесть одну дату из другой, ожидая получить разницу в месяцах, но вместо этого видели странное число вроде 456,78? Это не ошибка программы — так работает внутренняя логика Excel. Дело в том, что по умолчанию программа оперирует датами как числовыми значениями, где 1 день = 1 единица, а месяцы и годы автоматически конвертируются в дни. Например, разница между 01.01.2026 и 01.03.2026 для Excel — это 60 дней, а не 2 месяца.
Но что если вам нужно именно количество полных или календарных месяцев? Например, для расчёта стажа сотрудников, срока действия договоров или амортизации оборудования? Здесь требуются специальные формулы — и их в Excel целых пять! Каждая из них решает свою задачу: от простого подсчёта целых месяцев до учёта неполных периодов с округлением. В этой статье разберём все варианты — от базовых до продвинутых, — а также типичные ошибки, которые портят результаты.
Предупреждение заранее: если вы работаете с датами в формате дд.мм.гггг, убедитесь, что ячейки имеют именно формат даты, а не текстовый. Иначе Excel воспримет 01.03.2026 как обычную строку, и никакие формулы не сработают. Проверить это просто: выделите ячейку и посмотрите на формат в панели инструментов (должно быть что-то вроде Дата или Краткая дата).
Способ 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.2026 31.01.2026 1,02 0 01.01.2026 01.02.2026 1,00 1 15.01.2026 15.03.2026 2,00 2 Как видно из таблицы,
РАЗНДАТдаёт дробные значения, что может быть полезно для финансовых расчётов (например, амортизации), но не подходит для подсчёта целых месяцев.=ОКРУГЛ(РАЗНДАТ(A1; B1) / 30,44; 0)Но помните, что округление вверх (
ОКРУГЛВВЕРХ) может завысить результат на 1 месяц для пограничных дат (например, 29.01-28.02).-->Способ 4: Формула массива для учёта високосных годов и точных календарных месяцев
Если вам нужна максимальная точность с учётом реальной продолжительности месяцев (например, для юридических документов или научных расчётов), придётся использовать формулу массива. Она сложнее предыдущих, но даёт идеальный результат.
Формула:
=СУММ(--(ГОД(ДАТАМЕС(начальная_дата; СТРОКА(ДИАПАЗОН(1; РАЗНДАТ(начальная_дата; конечная_дата; "m"))); 1)) <= ГОД(конечная_дата));
--(МЕСЯЦ(ДАТАМЕС(начальная_дата; СТРОКА(ДИАПАЗОН(1; РАЗНДАТ(начальная_дата; конечная_дата; "m"))); 1)) <= МЕСЯЦ(конечная_дата))
) - 1
Разберём, как она работает:
- Функция
РАЗНДАТ(..., "m")считает количество полных месяцев между датами.ДАТАМЕСгенерирует последовательность дат, сдвигая начальную дату на 1, 2, 3... месяцев.СТРОКА(ДИАПАЗОН(...))создаёт массив чисел от 1 до количества месяцев.- Сравниваются годы и месяцы с конечной датой, результат преобразуется в 1/0 с помощью
--.СУММскладывает все единицы и вычитает 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 года.
Алгоритм действий:
- Выделите таблицу с датами и нажмите
Данные → Из таблицы/диапазона(илиGet & Transform Data → From Table/Rangeв англоязычной версии).- В открывшемся редакторе Power Query добавьте новый столбец:
Добавить столбец → Пользовательский столбец.- Введите формулу:
= Date.From([Конечная дата]) - Date.From([Начальная дата])Это даст разницу в днях.
- Добавьте ещё один столбец с формулой для месяцев:
= Number.RoundDown(Date.MonthsBetween([Конечная дата], [Начальная дата], "dd"))Здесь
"dd"указывает, что дни игнорируются.- Нажмите
Закрыть и загрузить, чтобы вернуть данные в Excel.Преимущества Power Query:
- ⚡ Обрабатывает миллионы строк без тормозов.
- 🔄 Легко обновляется при изменении исходных данных (правый клик по таблице →
Обновить).- 📊 Позволяет добавлять дополнительные вычисления (например, классификацию по срокам).
Как обработать даты в формате "январь 2026"
Если ваши даты записаны как текст (например, "январь 2026"), сначала преобразуйте их в формат даты в Power Query:
1. Выделите столбец →
Преобразовать → Формат → Дата.2. Если не сработало, используйте
Добавить столбец → Из текста по диапазонус разделителем пробела, затем объедините месяц и год в дату черезДата.ИзТекста.Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот самые распространённые ловушки и способы их обойти:
- Текст вместо даты: Если вы импортировали данные из внешнего источника (например, 1C или PDF), даты могут оказаться в текстовом формате. Проверить это можно с помощью функции
ТИП:=ТИП(A1) // Вернёт 16 для текста или 1 для числаРешение: используйте
ДАТАЗНАЧилиPower Queryдля преобразования.- Неучтённые високосные годы: Функции вроде
РАЗНДАТ / 30,44дадут погрешность для периодов, пересекающих 29 февраля. Например, разница между28.02.2023и28.02.2026по этой формуле будет ~12,07 месяцев вместо 12.- Отрицательные результаты: Если поменять даты местами,
DATEDIFвернёт ошибку, а другие формулы могут дать отрицательное число. ИспользуйтеАБСилиЕСЛИдля защиты:=ЕСЛИ(A1 > B1; DATEDIF(B1; A1; "m"); DATEDIF(A1; B1; "m"))- Проблемы с временными зонами: Если даты содержат время (например,
01.01.2026 14:30), его нужно обнулить с помощьюЦЕЛОЕ:=DATEDIF(ЦЕЛОЕ(A1); ЦЕЛОЕ(B1); "m")
Ошибка Пример Решение Текстовый формат "01.01.2026"(в кавычках)=ДАТАЗНАЧ(A1)Перепутанные даты DATEDIF("31.12.2026"; "01.01.2026"; "m")=ЕСЛИОШИБКА(DATEDIF(...); "Ошибка порядка дат")Високосный год Разница 28.02.2020–01.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. Например:
- Создайте таблицу с датами (
Ctrl+T).- Добавьте столбец с формулой
=DATEDIF([@[Дата1]]; [@[Дата2]]; "m").- Теперь при изменении данных в таблице формула будет пересчитываться автоматически.
Как вычесть месяцы из даты (а не наоборот)?
Для этого используйте функцию
ДАТАМЕС:=ДАТАМЕС("31.03.2026"; -2) // Вернёт 28.01.2026 (автоматически корректирует дни)Если нужно вычесть месяцы с учётом точной даты (например, всегда 15-е число), используйте:
=ЕДАТА(ДАТА(ГОД(A1); МЕСЯЦ(A1) - 2; ДЕНЬ(A1)))