Как от любой даты отнять месяцы в Excel: формулы, функции и лайфхаки

Почему простая арифметика с датами в Excel часто даёт сбои

На первый взгляд, вычитание месяцев из даты в Microsoft Excel кажется тривиальной задачей: взял дату, отнял число — и готов результат. Но на практике пользователи сталкиваются с неожиданными ошибками: вместо 31 марта получают 3 марта, а при вычитании 12 месяцев из 29 февраля 2026 года — вовсе #ЧИСЛО!. Всё дело в том, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), а месяцы имеют разную продолжительность (28–31 день). Прямое вычитание не учитывает эти нюансы.

К примеру, если вы попробуете отнять 1 месяц от 31.01.2026 простой формулой =A1-30, то получите 01.01.2026 — а не корректное 31.12.2026. Или хуже: при вычитании 13 месяцев из 29.02.2026 Excel вернёт ошибку, потому что 29 февраля 2023 года не существует. Решение — использовать специализированные функции, которые учитывают календарную логику.

Способ 1: Функция ДАТАМЕС — самый надёжный метод

Функция ДАТАМЕС (англ. EDATE) специально создана для добавления или вычитания месяцев к дате с учётом всех календарных особенностей. Её синтаксис:

=ДАТАМЕС(начальная_дата; количество_месяцев)

Где количество_месяцев может быть отрицательным числом (например, -3 для вычитания 3 месяцев). Преимущества метода:

  • ✅ Автоматически корректирует дату на последний день месяца, если исходный день отсутствует в целевом месяце (например, 31.01.2026 → 28.02.2026 при добавлении 1 месяца).
  • ✅ Работает с любыми датами, включая високосные годы.
  • ✅ Поддерживает динамические ссылки на ячейки.

Пример использования:

Исходная дата (A1)ФормулаРезультат
15.06.2026=ДАТАМЕС(A1; -2)15.04.2026
31.01.2026=ДАТАМЕС(A1; -1)31.12.2026
29.02.2026=ДАТАМЕС(A1; -12)28.02.2023
⚠️ Внимание: В старых версиях Excel (до 2007 года) функция ДАТАМЕС может отсутствовать. В этом случае используйте МЕСЯЦ + ГОД (см. Способ 3).
📊 Какой версии Excel вы пользуетесь?
2016 или новее
2010–2013
2007
Старая версия (2003 или ранее)
Не знаю

Способ 2: Комбинация ДАТА + ГОД/МЕСЯЦ/ДЕНЬ

Если функция ДАТАМЕС недоступна или вам нужно больше контроля над результатом, используйте формулу на основе ДАТА:

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

Где N — количество месяцев для вычитания. Например, чтобы отнять 5 месяцев от даты в ячейке A1:

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

Этот метод не корректирует несуществующие даты (например, 30 февраля). Если результат выходит за пределы допустимого диапазона, Excel вернёт ошибку. Чтобы избежать этого, добавьте проверку:

=ЕСЛИОШИБКА(ДАТА(ГОД(A1); МЕСЯЦ(A1) - 5; ДЕНЬ(A1)); ДАТА(ГОД(A1); МЕСЯЦ(A1) - 4; 1))

Убедитесь, что ячейка с датой отформатирована как Дата, а не Текст|

Проверьте, что количество месяцев для вычитания не превышает 120 (ограничение Excel)|

Используйте ЕСЛИОШИБКА, если важно избежать ошибок в результатах

-->

Способ 3: Вычитание дней с поправкой на месяцы (для простых случаев)

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

=A1 - (N * 30)

Где N — количество месяцев. Например, для вычитания 2 месяцев:

=A1 - 60

Однако этот метод даёт погрешность до 2 дней (так как месяцы имеют разную длину) и совершенно не подходит для дат в конце месяца. Например:

  • 31.03.2026 - 30 = 01.03.2026 (ожидалось: 28.02.2026).
  • 30.04.2026 - 60 = 30.02.2026 (ошибка: февраля нет 30-го).
⚠️ Внимание: Этот способ подходит только для приблизительных расчётов (например, в планировании проектов с запасом времени). Для финансовых или юридических документов используйте ДАТАМЕС.

Способ 4: Макрос VBA для массового вычитания месяцев

Если вам нужно обработать сотни строк с датами, ручной ввод формул займёт слишком много времени. В этом случае поможет макрос на VBA. Откройте редактор скриптов (Alt + F11), вставьте следующий код в модуль:

Sub SubtractMonths()

Dim rng As Range

Dim cell As Range

Dim monthsToSubtract As Integer

' Задайте диапазон ячеек с датами

Set rng = Selection

' Задайте количество месяцев для вычитания

monthsToSubtract = InputBox("Введите количество месяцев для вычитания (отрицательное число):", "Вычитание месяцев")

For Each cell In rng

If IsDate(cell.Value) Then

cell.Value = DateSerial(Year(cell.Value), Month(cell.Value) + monthsToSubtract, Day(cell.Value))

End If

Next cell

End Sub

Как использовать:

  1. Выделите диапазон ячеек с датами.
  2. Запустите макрос (Alt + F8 → выберите SubtractMonthsВыполнить).
  3. Введите количество месяцев (например, -6 для вычитания полугода).

Способ 5: Power Query для сложных трансформаций

Если вы работаете с большими наборами данных (например, импортируете даты из базы), удобнее использовать Power Query. Этот инструмент позволяет создавать повторяемые процессы очистки и преобразования данных.

Инструкция:

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

    где -3 — количество месяцев для вычитания.

  4. Нажмите Закрыть и загрузить.

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

  • ✅ Обрабатывает миллионы строк без замедления.
  • ✅ Сохраняет шаги преобразования для повторного использования.
  • ✅ Поддерживает сложные условия (например, вычитание месяцев только для дат старше 2020 года).
Как вернуть исходные данные после ошибки в Power Query?

Если вы случайно закрыли редактор Power Query без сохранения или получили неверный результат, не переживайте: оригинальные данные в Excel остаются нетронутыми. Просто удалите созданный запрос (Данные → Запросы и подключения → Удалить) и начните заново.

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

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

ОшибкаПричинаРешение
#ЧИСЛО! при вычитании месяцев из 29 февраляЦелевой год не високосныйИспользуйте ДАТАМЕС или ЕСЛИОШИБКА
Некорректный результат для 31-го числаЦелевой месяц корочеДобавьте проверку на последний день месяца: =КОНМЕСЯЦА(ДАТАМЕС(A1; -1); 0)
Формула возвращает число вместо датыНеверный формат ячейкиПримените формат Дата (Ctrl + 1 → Число → Дата)

Ещё одна частая проблема — скрытые пробелы или текст в ячейках. Если формула не работает, проверьте данные с помощью =ЕТЕКСТ(A1). Если результат ИСТИНА, очистите ячейку функцией =ДАТАЗНАЧ(A1).

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

Можно ли отнять месяцы от даты в формате "март 2026" (без дня)?

Да, но сначала преобразуйте текст в полноценную дату с помощью =ДАТАЗНАЧ("1 " & A1), где A1 содержит "март 2026". Затем применяйте ДАТАМЕС.

Почему после вычитания месяцев дата сдвигается на 4 года?

Скорее всего, вы случайно указали количество месяцев как -48 вместо -4. Excel интерпретирует 48 как 4 года (12 месяцев × 4). Проверьте формулу на опечатки.

Как отнять месяцы от текущей даты?

Используйте =ДАТАМЕС(СЕГОДНЯ(); -N), где N — количество месяцев. Функция СЕГОДНЯ() всегда возвращает актуальную дату.

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

Да, но для этого потребуется комбинация ДАТАМЕС и РАБДЕНЬ. Например, чтобы отнять 1 месяц и перейти на ближайший рабочий день:

=РАБДЕНЬ(ДАТАМЕС(A1; -1); 1)

Как сделать так, чтобы при вычитании месяцев день не менялся (например, всегда 15-е число)?

Зафиксируйте день в формуле:

=ДАТА(ГОД(A1); МЕСЯЦ(A1) - N; 15)

где 15 — нужный день месяца.