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

Работа с датами в Microsoft Excel — одна из самых востребованных задач среди пользователей. Добавление месяца к существующей дате может понадобиться для расчёта сроков оплаты, планирования проектов, составления графиков или анализа временных рядов. На первый взгляд задача кажется простой, но здесь кроются подводные камни: неверный учёт конца месяца (например, 31 января + 1 месяц), переход через год или работа с некорректными форматами данных.

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

Особое внимание уделим нюансам:

  • 📅 Что делать, если результат выходит за пределы месяца (например, 31.01 + 1 месяц = 28.02 или 31.03)?
  • 🔄 Как корректно обработать переход через год (декабрь → январь)?
  • ⚡ Почему иногда формулы возвращают ошибку #ЧИСЛО! или #ЗНАЧ!?
📊 Как часто вы работаете с датами в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

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

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

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

Пример: чтобы к дате в ячейке A1 (например, 15.05.2026) прибавить 1 месяц, используйте:

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

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

  • 🔹 Автоматически обрабатывает переход через год (например, ДАТАМЕС("31.12.2026"; 1) вернёт 31.01.2026).
  • 🔹 Если итоговая дата не существует (например, 31 февраля), функция вернёт последний день месяца (28.02 или 29.02 в високосный год).
  • 🔹 Работает в Excel 2007 и новее, включая Office 365.

Важно: функция ДАТАМЕС() может отсутствовать в русскоязычных версиях Excel до 2010 года. В этом случае используйте её английский аналог EDATE() или включите надстройку "Пакет анализа".

Убедитесь, что ячейка с датой имеет формат "Дата"|Проверьте наличие функции в вашей версии Excel|Для английской версии используйте EDATE() вместо ДАТАМЕС()-->

2. Функция ЕДАТ() — альтернатива для старых версий Excel

Если в вашей версии Excel нет функции ДАТАМЕС(), воспользуйтесь её аналогом — ЕДАТ() (от англ. "end date"). Эта функция входит в пакет надстроек Analysis ToolPak и доступна в Excel 2003–2010. Синтаксис идентичен:

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

Чтобы активировать ЕДАТ():

  1. Перейдите в Файл → Параметры → Надстройки.
  2. Внизу окна выберите Управление: Надстройки Excel и нажмите Перейти.
  3. Отметьте галочкой Пакет анализа и нажмите OK.

После активации функция будет доступна в списке формул. Пример использования:

=ЕДАТ("31.01.2026"; 1)  // Вернёт 28.02.2026
Чем ЕДАТ() отличается от ДАТАМЕС()?

Функция ЕДАТ() была создана для финансовых расчётов и входит в пакет Analysis ToolPak, тогда как ДАТАМЕС() — стандартная функция в новых версиях Excel. Обе работают одинаково, но ЕДАТ() может требовать ручной активации надстройки.

3. Ручное сложение с функцией ДАТА() — универсальный метод

Если специализированные функции недоступны, можно обойтись стандартной ДАТА(). Этот метод работает во всех версиях Excel и не требует надстроек. Логика проста: извлекаем год, месяц и день из исходной даты, прибавляем нужное количество месяцев, а затем собираем дату обратно.

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

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

Но здесь есть подводный камень: если прибавление месяца приводит к "несуществующей" дате (например, 31 января + 1 месяц), формула вернёт ошибку. Чтобы этого избежать, используйте модифицированный вариант с функцией ЕСЛИОШИБКА():

=ЕСЛИОШИБКА(ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; ДЕНЬ(A1)); ДАТА(ГОД(A1); МЕСЯЦ(A1)+2; 0))

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

  • 🔢 ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; ДЕНЬ(A1)) — пытаемся прибавить месяц.
  • ⚠️ Если возникает ошибка (например, 30 февраля), срабатывает ЕСЛИОШИБКА.
  • 📅 ДАТА(ГОД(A1); МЕСЯЦ(A1)+2; 0) — возвращаем последний день следующего месяца (например, 28.02 для 31.01).

4. Использование формулы массива для сложных случаев

Если вам нужно прибавить месяц к диапазону дат или учитывать дополнительные условия (например, пропускать выходные), поможет формула массива. Предположим, у вас в столбце A1:A10 перечень дат, и вы хотите прибавить к каждой по 1 месяцу, исключая субботы и воскресенья.

Формула для одной ячейки:

=ЕСЛИ(ИЛИ(ДЕНЬНЕД(ДАТАМЕС(A1;1);2)>5); ДАТАМЕС(A1;1)+2; ДАТАМЕС(A1;1))

Для обработки всего столбца:

  1. Выделите диапазон рядом с датами (например, B1:B10).
  2. Введите формулу и завершите ввод сочетанием Ctrl+Shift+Enter (в новых версиях Excel достаточно просто Enter).

Функция ДЕНЬНЕД() возвращает номер дня недели (где 1 — понедельник, 7 — воскресенье). Параметр 2 указывает, что неделя начинается с понедельника.

⚠️ Внимание: формулы массива могут значительно замедлить работу книги, если применены к большому диапазону (более 10 000 строк). В таких случаях лучше использовать VBA или Power Query.

5. Автоматизация через VBA — для продвинутых пользователей

Если вам нужно прибавить месяц к сотням или тысячам дат, ручной ввод формул займёт слишком много времени. В этом случае поможет макрос на VBA. Ниже приведён код, который добавляет 1 месяц ко всем выделенным ячейкам с датами:

Sub AddOneMonth()

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 и запустите макрос (Alt + F8 → AddOneMonth → Выполнить).

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

  • ⚡ Мгновенная обработка тысяч ячеек.
  • 🔧 Можно модифицировать код для добавления произвольного количества месяцев.
  • 📊 Подходит для интеграции в более сложные скрипты (например, для генерации отчётов).

⚠️ Внимание: перед запуском макроса сохраните книгу в формате .xlsm (с поддержкой макросов), иначе код не будет работать. Также убедитесь, что в настройках безопасности разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов).

Сравнение методов: какой выбрать?

Каждый из описанных способов имеет свои плюсы и минусы. В таблице ниже мы сравнили их по ключевым параметрам:

Метод Сложность Скорость Поддержка старых версий Обработка ошибок
ДАТАМЕС() ⚡ Мгновенно Excel 2007+ Автоматическая
ЕДАТ() ⭐⭐ ⚡ Мгновенно Excel 2003+ (требует надстройку) Автоматическая
ДАТА() + ЕСЛИОШИБКА() ⭐⭐⭐ ⚡ Мгновенно Все версии Ручная настройка
Формула массива ⭐⭐⭐⭐ ⏳ Медленно для больших данных Все версии Гибкая
VBA ⭐⭐⭐⭐⭐ ⚡ Мгновенно Все версии Настраиваемая

Рекомендации по выбору:

  • 🏆 Для большинства задач оптимален ДАТАМЕС() — он прост и надёжен.
  • 🛠️ Если функция недоступна, используйте ЕДАТ() или комбинацию ДАТА() + ЕСЛИОШИБКА().
  • 🤖 Для автоматизации рутинных операций подойдёт VBA.

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

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

1. Ошибка #ЗНАЧ! при использовании ДАТАМЕС()

Причина: ячейка содержит текст вместо даты. Например, если в A1 записано "31.01.2026" как текст (выровнено по левому краю), а не как дата.

Решение: преобразуйте текст в дату с помощью ДАТАЗНАЧ():

=ДАТАМЕС(ДАТАЗНАЧ(A1); 1)

2. Неправильный результат для последнего дня месяца

Причина: функции вроде ДАТА() не корректируют "несуществующие" даты (например, 31 апреля).

Решение: используйте ДАТАМЕС() или добавьте проверку на ошибки (см. раздел 3).

3. Дата отображается как число (например, 45367)

Причина: ячейка имеет общий формат, а не формат "Дата".

Решение: выделите ячейку → Главная → Формат → Формат ячеек → Дата.

4. Макрос не работает

Причина: книга сохранена в формате .xlsx (без поддержки макросов) или отключены макросы в настройках безопасности.

Решение: сохраните файл как .xlsm и проверьте настройки безопасности (Файл → Параметры → Центр управления безопасностью).

⚠️ Внимание: если вы импортируете даты из внешних источников (например, CSV или SQL), они часто распознаются как текст. Всегда проверяйте формат данных с помощью функции ТИП():
=ТИП(A1)  // Для даты вернёт 5 (в старых версиях — 1)

FAQ: Частые вопросы о добавлении месяцев в Excel

Можно ли прибавить к дате не целый месяц, а например, 1 месяц и 15 дней?

Да, для этого сначала добавьте месяц с помощью ДАТАМЕС(), а затем прибавьте дни:

=ДАТАМЕС(A1; 1) + 15

Или используйте функцию ДАТА():

=ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; ДЕНЬ(A1)+15)
Почему после добавления месяца дата сдвигается на 4 дня (например, 31.01 → 04.03)?

Это происходит, если ячейка имеет формат "Общий" или "Числовой", а не "Дата". Excel хранит даты как числа (количество дней с 1.01.1900), и при сложении месяца без корректировки формата вы видите сырое число. Решение: измените формат ячейки на "Дата".

Как прибавить месяц к дате в Google Sheets?

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

=EDATE(A1; 1)

Также работает комбинация с DATE():

=DATE(YEAR(A1); MONTH(A1)+1; DAY(A1))
Можно ли прибавить месяц к дате с учётом рабочих дней (исключая выходные)?

Да, для этого используйте функцию РАБДЕНЬ() (англ. WORKDAY()) вместе с ДАТАМЕС(). Пример:

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

Если нужно прибавить месяц и дополнительные рабочие дни:

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

Чтобы исключить праздники, добавьте их список третьим аргументом.

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

По умолчанию ДАТАМЕС() корректирует дату до последнего дня месяца. Если вам нужно сохранить номер дня (даже если он не существует в целевом месяце), используйте этот обходной путь:

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

Эта формула проверяет, превышает ли исходный день количество дней в следующем месяце, и корректирует результат.