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

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

Возможно, вы уже пытались просто отнять 1 от даты в формате 15.05.2026 и получили 14.05.2026 вместо ожидаемого 15.04.2026. Это происходит потому, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года), где день — это основная единица измерения. При обычном вычитании программа оперирует именно днями, а не месяцами.

Проблема усложняется тем, что месяцы имеют разное количество дней: февраль может содержать 28 или 29 дней, апрель — 30, а май — 31. Простое вычитание 30 или 31 дней приведёт к ошибкам в 70% случаев. Например, если вычесть 31 день из 31.01.2026, Excel вернёт 31.12.2023, хотя правильный результат — 01.01.2026.

В этой статье мы разберём 5 надёжных методов, которые учитывают все нюансы календаря, включая високосные годы и переходы через границы месяцев. Вы узнаете, как использовать встроенные функции, формулы массива и даже VBA-скрипты для автоматизации задачи.

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

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

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

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

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

  • 📅 Чтобы вычесть 1 месяц из даты в ячейке A1: =ДАТАМЕС(A1; -1)
  • 📅 Чтобы вычесть 3 месяца из текущей даты: =ДАТАМЕС(СЕГОДНЯ(); -3)
  • 📅 Чтобы получить дату через 6 месяцев вперед: =ДАТАМЕС("15.05.2026"; 6)

Особенности функции:

  • ✅ Автоматически обрабатывает переходы через годы (например, ДАТАМЕС("31.12.2023"; -1) вернёт 30.11.2023)
  • ✅ Учитывает високосные годы (29 февраля 2026 → 29 февраля 2023 при вычитании 12 месяцев)
  • ❌ Не работает в Excel 2003 и более ранних версиях

Метод 2: Комбинация функций ДАТА, ГОД, МЕСЯЦ и ДЕНЬ

Если ДАТАМЕС недоступна, можно вручную разложить дату на компоненты, вычесть месяцы, а затем собрать обратно. Этот метод работает во всех версиях Excel, включая Excel 2003.

Формула для вычитания 1 месяца:

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

Разберём её пошагово:

  1. ГОД(A1) — извлекает год из даты
  2. МЕСЯЦ(A1)-1 — вычитает 1 из номера месяца
  3. ДЕНЬ(A1) — извлекает день
  4. ДАТА() — собирает всё обратно в дату

Проблемы и решения:

  • ⚠️ Если месяц январь (номер 1), то МЕСЯЦ(A1)-1 даст 0 — Excel автоматически скорректирует это на декабрь предыдущего года.
  • ⚠️ Если день больше, чем дней в новом месяце (например, 31 января → 31 февраля), Excel вернёт #ЧИСЛО!. Решение — использовать МИН:
=ДАТА(ГОД(A1); МЕСЯЦ(A1)-1; МИН(ДЕНЬ(A1); ДЕНЬ(ДАТА(ГОД(A1); МЕСЯЦ(A1); 0))))
Почему формула возвращает #ЧИСЛО!?

Ошибка возникает, когда вы пытаетесь создать несуществующую дату, например 31 февраля или 31 апреля. Excel не может обработать такую комбинацию и выдаёт ошибку.

Метод 3: Использование функции КОНМЕСЯЦА (EOMONTH)

Функция КОНМЕСЯЦА (англ. EOMONTH) возвращает последний день месяца, отстоящего на заданное количество месяцев от начальной даты. Её можно адаптировать для вычитания месяцев.

Синтаксис:

=КОНМЕСЯЦА(начальная_дата; количество_месяцев)

Чтобы вычесть 1 месяц и получить ту же самую дату (а не последний день месяца), используйте комбинацию:

=ДАТАМЕС(A1; -1) + ДЕНЬ(A1) - ДЕНЬ(КОНМЕСЯЦА(A1; -1))

Пример работы:

Исходная дата (A1)ФормулаРезультат
31.01.2026=ДАТАМЕС(A1; -1)31.12.2023
29.02.2026=ДАТАМЕС(A1; -1)29.01.2026
31.03.2026=КОНМЕСЯЦА(A1; -1)+129.02.2026

Критическая особенность: функция КОНМЕСЯЦА требует подключения надстройки Пакет анализа в Excel 2010 и более ранних версиях.

📊 Какую функцию вы используете чаще для работы с датами?
ДАТАМЕС
КОНМЕСЯЦА
ДАТА+ГОД+МЕСЯЦ
Другую

Метод 4: Формула массива для сложных случаев

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

Пример: вычесть 1 месяц, но если результат попадает на выходной, перенести на ближайший понедельник:

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

Более сложный вариант с проверкой на високосный год:

=ЕСЛИ(

И(МЕСЯЦ(A1)=3; ДЕНЬ(A1)=1);

ЕСЛИ(ГОД(A1)/4=ЦЕЛОЕ(ГОД(A1)/4); ДАТА(ГОД(A1); 2; 29); ДАТА(ГОД(A1); 2; 28));

ДАТАМЕС(A1; -1)

)

Как вводить формулу массива:

  1. Выделите ячейку для результата
  2. Введите формулу
  3. Нажмите Ctrl + Shift + Enter (вместо обычного Enter)

Ввели формулу в ячейку|

Нажали Ctrl+Shift+Enter (появились фигурные скобки {})|

Проверили результат на 2-3 тестовых датах|

Убедились, что нет ошибок #ЗНАЧ! или #ЧИСЛО!-->

Метод 5: VBA-скрипт для автоматизации

Если вам нужно вычесть месяцы в сотнях строк или интегрировать операцию в макрос, используйте Visual Basic for Applications. Этот метод требует начальных знаний VBA, но даёт максимальную гибкость.

Пример кода для вычитания 1 месяца из выделенных ячеек:

Sub SubtractMonth()

Dim cell As Range

For Each cell In Selection

If IsDate(cell.Value) Then

cell.Value = DateSerial(Year(cell.Value), Month(cell.Value) - 1, Day(cell.Value))

End If

Next cell

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA
  2. Вставьте код в новый модуль (Insert → Module)
  3. Выделите ячейки с датами в Excel
  4. Запустите макрос через Alt + F8 → выберите SubtractMonthВыполнить

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

  • 🚀 Обрабатывает тысячи строк за секунды
  • 🔧 Можно добавить проверку на ошибки (например, пропускать некорректные даты)
  • 📊 Интегрируется с другими макросами

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

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

⚠️ Внимание: Если ваша дата хранится как текст (например, после импорта из CSV), Excel не распознаёт её как дату. Используйте =ДАТАЗНАЧ(A1), чтобы преобразовать текст в дату перед вычитанием месяцев.

Список типичных ошибок:

  • 🔴 #ЗНАЧ! — возникает, если ячейка содержит текст вместо даты. Решение: проверьте формат ячейки (Формат → Формат ячеек → Дата).
  • 🔴 #ЧИСЛО! — несуществующая дата (например, 31 февраля). Решение: используйте МИН для корректировки дня.
  • 🔴 Неправильный год — при вычитании месяцев из января Excel может вернуть 13-й месяц. Решение: используйте ДАТАМЕС или проверяйте результат.

Как проверить формат ячейки:

  1. Выделите ячейку с датой
  2. Нажмите Ctrl + 1 (или правая кнопка → Формат ячеек)
  3. Выберите категорию Дата и укажите нужный формат (например, 14.03.2001)
ОшибкаПричинаРешение
######Ячейка слишком узкая для отображения датыРастяните столбец или измените формат на Краткий формат даты
45678Дата отображается как число (внутренний формат Excel)Измените формат ячейки на Дата
#ИМЯ?Опечатка в названии функции (например, ДАТМЕС вместо ДАТАМЕС)Проверьте синтаксис функции

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

Можно ли вычесть месяц из даты без использования функций?

Технически да, но это ненадёжно. Например, можно вычесть 30 дней: =A1-30. Однако такой метод даст ошибку для дат вроде 31.03.2026 (результат: 01.03.2026 вместо 29.02.2026). Используйте этот способ только для приблизительных расчётов.

Почему после вычитания месяца из 31 января получаю 31 декабря, а не 30 ноября?

Это особенность функции ДАТАМЕС: она сохраняет день месяца, даже если он превышает количество дней в новом месяце. Чтобы получить последний день предыдущего месяца, используйте =КОНМЕСЯЦА(A1; -1).

Как вычесть месяц в Google Sheets?

В Google Таблицах работает та же функция =ДАТАМЕС(A1; -1). Альтернатива — =ДАТА(ГОД(A1); МЕСЯЦ(A1)-1; ДЕНЬ(A1)), но она вернёт ошибку для несуществующих дат (например, 31 февраля).

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

Да, комбинируйте ДАТАМЕС с РАБДЕНЬ:

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

Эта формула вернёт ближайший рабочий день до или в день результата.

Как сделать так, чтобы при вычитании месяца из 29 февраля получалось 28 февраля?

Используйте условную проверку:

=ЕСЛИ(

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

ДАТА(ГОД(A1)-1; 2; 28);

ДАТАМЕС(A1; -1)

)