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

Работа с датами в Microsoft Excel — одна из самых востребованных задач для аналитиков, бухгалтеров и специалистов по персоналу. Чаще всего требуется рассчитать разницу между двумя датами в месяцах: например, для определения стажа сотрудника, срока действия договора или периода амортизации оборудования. На первый взгляд задача кажется простой, но стандартное вычитание дат (`=B1-A1`) вернёт количество дней, а не месяцев. А если просто разделить результат на 30 — получите приблизительную цифру с погрешностью до 2-3 дней.

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

Для наглядности будем использовать реальный пример: рассчитаем стаж сотрудников компании по дате приёма на работу. Все формулы протестированы в Excel 2019, Excel 365 и Google Sheets — различия укажем отдельно.

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

Если вы попробуете вычесть одну дату из другой (`=Конечная_дата - Начальная_дата`), Excel вернёт количество дней между ними. Например, для дат 01.01.2023 и 31.01.2023 результат будет 30, хотя по логике прошёл всего 1 месяц.

Причины, почему этот метод не подходит для расчёта месяцев:

  • 📅 Разная продолжительность месяцев: февраль может иметь 28 или 29 дней, апрель — 30, а май — 31. Деление на среднее значение (30.4 дней) даёт погрешность.
  • 📊 Неучёт календарных правил: например, разница между 31.01.2023 и 01.03.2023 должна составлять 1 месяц и 1 день, но простое вычитание покажет 30 дней.
  • ⚠️ Ошибки с отрицательными датами: если начальная дата позже конечной, Excel может вернуть ошибку #ЧИСЛО! или некорректное значение.

Ещё одна ловушка — формат ячеек. Если даты введены как текст (например, "01.01.2023" в кавычках), Excel воспримет их как строки, и вычитание вернёт ошибку. Всегда проверяйте формат ячеек: выделите диапазон и посмотрите в меню Главная → Формат → Формат ячеек (должен быть выбран тип "Дата").

📊 Какой версией Excel вы пользуетесь?
Excel 2019 или новее
Excel 2016
Excel 2013
Google Sheets
Другая

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

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

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

=РАЗНДАТ(нач_дата; кон_дата; единица_измерения)

где единица_измерения может принимать значения:

  • "m" — количество полных месяцев между датами (игнорирует дни).
  • "d" — количество дней.
  • "y" — количество полных лет.
  • "ym" — количество месяцев без учёта лет (остаток после вычитания полных лет).
  • "md" — количество дней без учёта месяцев и лет.

Пример: чтобы посчитать количество полных месяцев между 15.05.2022 (дата приёма) и 20.11.2023 (текущая дата), используем:

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

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

Важно: функция РАЗНДАТ округляет месяцы в меньшую сторону. Если разница между датами составляет 1 месяц и 29 дней, результат всё равно будет 1. Чтобы учесть неполные месяцы, комбинируйте её с другими функциями (см. способ 3).

Почему РАЗНДАТ скрыта в Excel?

Функция РАЗНДАТ была добавлена для совместимости с программой Lotus 1-2-3, но никогда не документировалась в справочной системе Excel. Microsoft не рекомендует её использовать, но и не удаляет, так как она широко применяется в legacy-проектах.

Способ 2: Формула с ГОД, МЕСЯЦ и ДЕНЬ — для точного расчёта

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

= (ГОД(кон_дата) - ГОД(нач_дата)) * 12 + (МЕСЯЦ(кон_дата) - МЕСЯЦ(нач_дата)) + ЕСЛИ(ДЕНЬ(кон_дата) >= ДЕНЬ(нач_дата); 0; -1)

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

  1. Вычисляем разницу в годах и умножаем на 12 (количество месяцев в году).
  2. Добавляем разницу в месяцах.
  3. Корректируем результат на дни: если день конечной даты меньше дня начальной (например, 20.11.2023 и 15.05.2022), вычитаем 1 месяц.

Пример для дат 15.05.2022 и 20.11.2023:

= (2023 - 2022) * 12 + (11 - 5) + ЕСЛИ(20 >= 15; 0; -1)  →  12 + 6 + 0 = 18 месяцев

Если поменять даты местами (20.11.2023 и 15.05.2022), формула вернёт -18. Чтобы избежать отрицательных значений, оберните её в АБС():

= АБС((ГОД(кон_дата) - ГОД(нач_дата)) * 12 + (МЕСЯЦ(кон_дата) - МЕСЯЦ(нач_дата)) + ЕСЛИ(ДЕНЬ(кон_дата) >= ДЕНЬ(нач_дата); 0; -1))

Убедитесь, что обе даты в формате "Дата"|Проверьте порядок дат (нач_дата ≤ кон_дата)|Для отрицательных значений используйте АБС()|Тестируйте формулу на краевых случаях (например, 31.01 и 01.03)

-->

Способ 3: Учёт неполных месяцев и дробные значения

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

= (кон_дата - нач_дата) / 30,417

где 30,417 — среднее количество дней в месяце (365 дней / 12 месяцев).

Пример: разница между 15.05.2022 и 20.11.2023 составит:

= ("20.11.2023" - "15.05.2022") / 30,417  →  544 / 30,417 ≈ 17,88 месяцев

Для бухгалтерских расчётов часто требуется округление. Используйте:

  • =ОКРУГЛ(формула; 2) — до 2 знаков после запятой.
  • =ОКРУГЛВВЕРХ(формула; 0) — до целого в большую сторону.
  • =ОКРУГЛВНИЗ(формула; 0) — до целого в меньшую сторону.

Критическая особенность: этот метод даёт приблизительный результат. Для точных финансовых расчётов (например, по стандартам МСФО) используйте специализированные функции или надстройки, такие как Analysis ToolPak.

Таблица сравнения методов расчёта

Чтобы выбрать оптимальный способ, сравните их особенности:

Метод Точность Учёт неполных месяцев Сложность Пример результата
(15.05.2022 – 20.11.2023)
РАЗНДАТ(..., "m") Высокая Нет (округляет вниз) Низкая 18
Формула с ГОД/МЕСЯЦ/ДЕНЬ Высокая Частично (корректирует на дни) Средняя 18
Дробное деление на 30,417 Средняя Да (дробные значения) Низкая 17,88
РАЗНДАТ(..., "ym") Высокая Нет (месяцы без учёта лет) Низкая 6

Для большинства задач (например, расчёт стажа) достаточно РАЗНДАТ. Если нужны дробные месяцы — используйте деление на 30,417, но учитывайте погрешность.

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

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

⚠️ Внимание: Если формула возвращает ошибку #ИМЯ?, проверьте регистр функций. В русскоязычной версии Excel используйте РАЗНДАТ, а не DATEDIF. В англоязычной — наоборот.

Чек-лист для диагностики ошибок:

  • 🔍 Ошибка #ЗНАЧ!: одна или обе даты введены как текст. Исправление: примените формат "Дата" или используйте =ДАТАЗНАЧ(текстовая_дата).
  • 📅 Некорректный результат: проверьте порядок дат (нач_дата должна быть раньше кон_дата). Используйте АБС() для абсолютных значений.
  • ⚠️ Ошибка #ЧИСЛО!: разница между датами превышает допустимый диапазон (Excel поддерживает даты с 1900 по 9999 год).

Пример исправления текстовой даты:

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

Ещё одна частая проблема — автоматическое изменение формата даты. Например, при импорте данных из CSV дата 05.06.2023 может превратиться в 06.05.2023 (если Excel интерпретирует её как американский формат месяц/день/год). Чтобы избежать этого, используйте ТЕКСТ(дата; "дд.мм.гггг") для принудительного форматирования.

Практический пример: расчёт стажа сотрудников

Рассмотрим реальную задачу: у нас есть таблица с датами приёма сотрудников, и нужно посчитать их стаж в месяцах на текущую дату.

Исходные данные:

ФИО Дата приёма Текущая дата Стаж (месяцев)
Иванов И.И. 15.03.2020 20.11.2023 =РАЗНДАТ(B2; C2; "m")
Петрова А.С. 01.12.2022 20.11.2023 =РАЗНДАТ(B3; C3; "m")

Шаги для автоматизации:

  1. В ячейку C2 введите =СЕГОДНЯ() — это функция, которая всегда возвращает текущую дату.
  2. В ячейку D2 введите =РАЗНДАТ(B2; C2; "m") и протяните формулу вниз.
  3. Чтобы отобразить стаж в виде "X лет Y месяцев", используйте:
    =РАЗНДАТ(B2; C2; "y") & " лет " & РАЗНДАТ(B2; C2; "ym") & " месяцев"

Для удобства добавьте условное форматирование: выделите столбец со стажем, перейдите в Главная → Условное форматирование → Правила выделения ячеек → Больше чем и установите порог (например, 60 месяцев). Это поможет быстро найти сотрудников с большим стажем.

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

Можно ли использовать РАЗНДАТ в Google Sheets?

Да, функция DATEDIF (в англоязычной версии) или РАЗНДАТ (в русскоязычной) работает в Google Sheets без изменений. Синтаксис идентичен Excel.

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

Используйте функцию ДАТА для создания полной даты с условным днём (например, 1-е число):

=РАЗНДАТ(ДАТА(2022; 5; 1); ДАТА(2023; 11; 1); "m")

Это вернёт разницу между маем 2022 и ноябрем 2023 в месяцах.

Почему РАЗНДАТ возвращает ошибку #ЧИСЛО! для дат до 1900 года?

Excel поддерживает даты начиная с 01.01.1900 (в системе Windows) или 01.01.1904 (в системе Mac). Для исторических дат используйте альтернативные методы, например, ручной расчёт через функции ГОД/МЕСЯЦ.

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

Для этого потребуется дополнительная таблица с перечнем праздников и функция ЧИСТРАБДНИ (NETWORKDAYS). Пример:

= (ЧИСТРАБДНИ(нач_дата; кон_дата) / 21) + 1

где 21 — среднее количество рабочих дней в месяце. Точность этого метода ~90%, для бухгалтерских расчётов лучше использовать специализированные надстройки.

Можно ли автоматически обновлять текущую дату в формуле?

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