Расчёт количества месяцев между двумя датами в Microsoft Excel — одна из самых востребованных задач при работе с временными интервалами. Бухгалтерам нужно определять стаж сотрудников, аналитикам — длительность проектов, а HR-специалистам — сроки испытательных периодов. Казалось бы, что может быть проще? Но даже опытные пользователи сталкиваются с подводными камнями: формулы возвращают некорректные значения, игнорируют неполные месяцы или учитывают дни вместо целых периодов.
В этой статье мы разберём 5 надёжных способов вычисления месяцев между датами — от базовой функции РАЗНДАТ (или DATEDIF в английской версии) до сложных формул с учётом календарных нюансов. Вы узнаете, как избежать ошибок при работе с 31-дневными месяцами, как округлять результаты и почему иногда Excel «врёт» на 1 месяц. А в конце — бонус: готовая таблица с формулами для копирования!
1. Базовый метод: функция РАЗНДАТ (DATEDIF) для целых месяцев
Функция РАЗНДАТ (в английской версии — DATEDIF) — это «скрытый инструмент» Excel, который не отображается в списке функций, но работает во всех версиях программы, включая Excel 365 и Excel 2019. Она специально разработана для расчёта разницы между датами в днях, месяцах или годах.
Чтобы посчитать полные месяцы между двумя датами, используйте синтаксис:
=РАЗНДАТ(нач_дата; кон_дата; "m")
Где:
- 📅
нач_дата— ячейка с начальной датой (например,A2). - 📅
кон_дата— ячейка с конечной датой (например,B2). - 🔢
"m"— параметр, указывающий, что результат нужно вернуть в месяцах.
Пример: если в ячейке A2 указана дата 01.01.2023, а в B2 — 15.03.2023, формула вернёт 2 (полных месяца). Обратите внимание: функция игнорирует дни и округляет результат вниз до целого месяца.
2. Учёт неполных месяцев: формула с округлением
Что делать, если нужно посчитать месяцы с учётом дней? Например, с 10.01.2023 по 10.02.2023 прошёл ровно 1 месяц, а с 10.01.2023 по 25.02.2023 — уже 1 месяц и 15 дней. В этом случае базовая РАЗНДАТ вернёт только 1, хотя фактически прошло больше.
Используйте комбинацию функций РАЗНДАТ и ЕСЛИ для округления:
=ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2); РАЗНДАТ(A2; B2; "m"); РАЗНДАТ(A2; B2; "m")-1)
Логика работы:
- ✅ Если день конечной даты (
B2) больше или равен дню начальной даты (A2) — возвращаем полные месяцы. - ❌ Если день конечной даты меньше — отнимаем 1 месяц (так как неполный месяц не учитывается).
Почему формула может вернуть отрицательное значение?
Если конечная дата (B2) раньше начальной (A2), Excel вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, добавьте проверку:
=ЕСЛИ(B2=ДЕНЬ(A2); РАЗНДАТ(A2; B2; "m"); РАЗНДАТ(A2; B2; "m")-1))
3. Альтернативный способ: вычитание годов и месяцев
Если функция РАЗНДАТ по какой-то причине недоступна (например, в некоторых онлайн-версиях Excel), можно использовать арифметический метод:
= (ГОД(B2)-ГОД(A2))*12 + (МЕСЯЦ(B2)-МЕСЯЦ(A2))
Эта формула:
- Вычисляет разницу в годах и умножает на 12 (чтобы получить месяцы).
- Добавляет разницу в месяцах между датами.
Пример: для дат 15.06.2022 и 20.11.2023 расчёт будет таким:
(2023-2022)*12 + (11-6) = 17 месяцев.
⚠️ Внимание: Этот метод не учитывает дни. Если конечная дата приходится на более ранний день месяца, чем начальная (например, с30.01.2023по28.02.2023), формула вернёт 1 месяц, хотя фактически прошло меньше.
4. Точный расчёт с учётом дней: формула массива
Для максимальной точности (например, при расчёте стажа или кредитных платежей) используйте формулу массива, которая учитывает дни как часть месяца:
=РАЗНДАТ(A2; B2; "m") + ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2); 0; -1) + (ДЕНЬ(B2)-ДЕНЬ(A2))/ДЕНЬ(ДАТА(ГОД(B2); МЕСЯЦ(B2)+1; 0))
Разберём по частям:
- 📊
РАЗНДАТ(A2; B2; "m")— полные месяцы. - 🔄
ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2); 0; -1)— корректировка на неполный месяц. - ➗
(ДЕНЬ(B2)-ДЕНЬ(A2))/ДЕНЬ(ДАТА(ГОД(B2); МЕСЯЦ(B2)+1; 0))— доля дней в текущем месяце.
Пример: для интервала 10.01.2023–25.02.2023 формула вернёт 1.52 месяца (1 полный месяц + 15 дней из 28 в феврале).
Убедитесь, что даты в ячейках имеют формат Дата (не текст!)|Проверьте, что конечная дата не раньше начальной|Для точных расчётов используйте формат ячейки Общий или Числовой с 2 знаками после запятой|Тестируйте формулу на крайних случаях (например, 31 января → 1 марта)
-->
5. Расчёт месяцев между датами с учётом високосных лет
Если ваш интервал включает 29 февраля (например, расчёт стажа с 28.02.2020 по 01.03.2021), стандартные формулы могут дать сбой. В этом случае используйте комбинацию ДАТА и ЕСЛИ:
=ЕСЛИ(И(ДЕНЬ(A2)=29; МЕСЯЦ(A2)=2; НЕ(ГОД(B2)=ГОД(A2))); РАЗНДАТ(A2; ДАТА(ГОД(B2);3;1); "m"); РАЗНДАТ(A2; B2; "m"))
Логика:
- 🔍 Проверяем, является ли начальная дата
29.02. - 📅 Если да — заменяем конечную дату на
01.03текущего года (чтобы избежать ошибки с несуществующим29.02в невисокосный год). - 🔢 В остальных случаях используем стандартную
РАЗНДАТ.
⚠️ Внимание: В Excel для Mac функция РАЗНДАТ может работать иначе, чем в Windows-версии. Тестируйте формулы на реальных данных перед использованием в важных расчётах!
Сравнение методов: какой выбрать?
Чтобы вам было проще ориентироваться, мы собрали все способы в одну таблицу с плюсами и минусами:
| Метод | Формула | Учитывает дни | Работает с 29.02 | Когда использовать |
|---|---|---|---|---|
Базовая РАЗНДАТ |
=РАЗНДАТ(A2; B2; "m") |
❌ Нет | ⚠️ Да (но может ошибаться) | Простые расчёты целых месяцев |
РАЗНДАТ + ЕСЛИ |
=ЕСЛИ(ДЕНЬ(B2)>=ДЕНЬ(A2); РАЗНДАТ(...); ...) |
⚠️ Частично | ⚠️ Да | Стаж, кредиты (без дробных месяцев) |
| Арифметический метод | = (ГОД(B2)-ГОД(A2))*12 + ... |
❌ Нет | ❌ Нет | Быстрые прикидки без точности |
| Формула массива | =РАЗНДАТ(...) + (ДЕНЬ(B2)-ДЕНЬ(A2))/... |
✅ Да | ⚠️ Да (с поправками) | Точные расчёты (бухгалтерия, аналитика) |
| С учётом 29.02 | =ЕСЛИ(И(ДЕНЬ(A2)=29; МЕСЯЦ(A2)=2; ... |
❌ Нет | ✅ Да | Интервалы с високосными годами |
Частые ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот TOP-3 проблемы и их решения:
- Ошибка #ЧИСЛО! при использовании
РАЗНДАТ.
Причина: неверный формат ячеек (текст вместо даты) или конечная дата раньше начальной.
Решение: проверьте формат ячеек (Формат → Ячейки → Дата) и порядок дат. - Неправильный результат для 31-го числа.
Пример: с31.01.2023по28.02.2023функция вернёт 0 месяцев, хотя прошло 28 дней.
Решение: используйте формулу с учётом дней (раздел 4). - Игнорирование високосных лет.
Пример: расчёт стажа с29.02.2020по28.02.2021даст ошибку, так как29.02.2021не существует.
Решение: применяйте специализированную формулу (раздел 5).
FAQ: Ответы на популярные вопросы
Как посчитать месяцы между датами в Google Таблицах?
В Google Sheets функция РАЗНДАТ работает аналогично Excel, но имеет другой синтаксис на английском:
=DATEDIF(A2; B2; "m")
Для учёта дней используйте ту же логику, что и в Excel (раздел 2). Обратите внимание: в Google Таблицах нет проблемы с 29.02 — функция автоматически корректирует даты.
Можно ли посчитать месяцы с учётом рабочих дней?
Да, но для этого понадобится комбинация функций РАЗНДАТ, ЧИСТРАБДНИ и ДЕНЬНЕД. Пример:
=РАЗНДАТ(A2; B2; "m") & " мес. и " & ЧИСТРАБДНИ(A2; B2) & " раб. дней"
Эта формула вернёт текст вида "2 мес. и 42 раб. дней".
Почему моя формула возвращает отрицательное число?
Это происходит, если конечная дата (B2) раньше начальной (A2). Чтобы избежать ошибки, добавьте проверку:
=ЕСЛИ(B2
Как округлять результат до целых месяцев?
Используйте функцию ОКРУГЛ:
=ОКРУГЛ(РАЗНДАТ(A2; B2; "m") + (ДЕНЬ(B2)-ДЕНЬ(A2))/30; 0)
Здесь мы:
- Добавляем к месяцам долю дней (деленную на 30 для усреднения).
- Округляем результат до целого числа.
Можно ли посчитать месяцы между сегодняшней датой и другой датой?
Да! Замените одну из дат на СЕГОДНЯ():
=РАЗНДАТ(A2; СЕГОДНЯ(); "m")
Эта формула будет автоматически обновляться при каждом открытии файла.