Почему простой сложение дат в Excel часто даёт сбой
Добавить 9 месяцев к дате в Microsoft Excel кажется простой задачей — пока вы не сталкиваетесь с ошибками вроде #ЗНАЧ! или некорректными результатами из-за високосных лет. Многие пользователи ошибочно пытаются просто прибавить 9 к ячейке с датой, но это работает только для дней, а не для месяцев. Например, если к 15.01.2026 прибавить 9, Excel вернёт 24.01.2026 — совсем не то, что нужно.
Проблема усложняется, когда речь идёт о датах в конце месяца. Что произойдёт, если к 31.01.2026 прибавить 9 месяцев? Правильный ответ — 31.10.2026, но некоторые формулы могут вернуть 30.10.2026 или даже ошибку. В этой статье разберём 5 надёжных способов, которые учитывают все нюансы календаря, включая переходы между годами и месяцами разной длины.
Особенно важно понимать разницу между абсолютным и относительным прибавлением месяцев. В первом случае вы фиксируете количество дней (например, 270 дней ≈ 9 месяцев), во втором — оперируете именно месяцами как единицами измерения. Второй подход точнее, но требует специальных функций.
Способ 1: Функция ДАТАМЕС — самый простой и надёжный метод
Функция ДАТАМЕС (англ. EDATE) специально создана для добавления месяцев к датам. Её синтаксис:
=ДАТАМЕС(нач_дата; число_месяцев)
Пример: чтобы к дате в ячейке A1 прибавить 9 месяцев, используйте:
=ДАТАМЕС(A1; 9)
Преимущества метода:
- 🔹 Автоматически учитывает разную длину месяцев (например, февраль с 28/29 днями).
- 🔹 Корректно обрабатывает переходы между годами (например,
31.12.2026 + 1 месяц = 31.01.2026). - 🔹 Не требует ручных поправок для високосных лет.
Однако есть нюанс: если итоговая дата выходит за пределы текущего месяца (например, 31.01.2026 + 1 месяц), Excel вернёт последнее число следующего месяца (29.02.2026 для невисокосного года). Это поведение можно обойти с помощью комбинации функций (см. Способ 3).
Ячейка с датой имеет формат"Дата" (не"Текст" или"Общий")|Функция доступна в вашей версии Excel (отсутствует в Excel 2003)|Итоговая дата не выходит за пределы поддерживаемого диапазона (01.01.1900 — 31.12.9999)-->
Способ 2: Ручное сложение с учётом годов и месяцев
Если функция ДАТАМЕС по какой-то причине недоступна (например, в старых версиях Excel), можно воспользоваться комбинацией функций ДАТА, ГОД, МЕСЯЦ и ДЕНЬ:
=ДАТА(ГОД(A1); МЕСЯЦ(A1)+9; ДЕНЬ(A1))
Эта формула:
- Извлекает год, месяц и день из исходной даты.
- Прибавляет 9 к номеру месяца.
- Автоматически корректирует год, если сумма месяцев превышает 12.
Пример: для даты 15.06.2026 формула вернёт 15.03.2026 (6 + 9 = 15 → 15 - 12 = 3 месяц следующего года).
⚠️ Внимание: Если итоговый месяц превышает 12, но день исходной даты больше количества дней в целевом месяце (например, 31.01.2026 + 1 месяц), Excel вернёт ошибку #ЧИСЛО!. Чтобы избежать этого, используйте:
=ДАТА(ГОД(A1)+ЦЕЛОЕ((МЕСЯЦ(A1)+9-1)/12); ОСТАТ(МЕСЯЦ(A1)+9-1;12)+1; МИН(ДЕНЬ(A1); ДЕНЬ(ДАТА(ГОД(A1)+ЦЕЛОЕ((МЕСЯЦ(A1)+9)/12); ОСТАТ(МЕСЯЦ(A1)+9;12)+1; 0))))
Почему формула такая сложная?
Эта формула решает две задачи:
1. Корректно рассчитывает год и месяц с учётом перехода через декабрь (например, 11 + 9 = 20 → 2026 год, 8 месяц).
2. Ограничивает день итоговой даты последним днём целевого месяца, если исходный день"выпадает" (например, 31 января → 28/29 февраля).
Способ 3: Комбинация ДАТАМЕС и ЕСЛИОШИБКА для"выпадающих" дат
Чтобы избежать ошибок при добавлении месяцев к датам вроде 31.01.2026 или 30.02.2026 (которая изначально некорректна), используйте эту формулу:
=ЕСЛИОШИБКА(ДАТАМЕС(A1;9); ДАТА(ГОД(A1)+ЦЕЛОЕ(МЕСЯЦ(A1)/12)+ЦЕЛОЕ(9/12); ОСТАТ(МЕСЯЦ(A1)+9;12); ДЕНЬ(ДАТА(ГОД(A1)+ЦЕЛОЕ((МЕСЯЦ(A1)+9)/12); ОСТАТ(МЕСЯЦ(A1)+9;12)+1; 0))))
Как это работает:
- 🔹 Сначала пытается применить
ДАТАМЕС. - 🔹 Если возникает ошибка (например, для
31.01.2026 + 9 месяцев = 31.10.2026, но октябрь имеет только 31 день), формула рассчитывает последнее число целевого месяца.
Этот метод гарантированно вернёт корректную дату даже для"проблемных" случаев, таких как 31 января + 1 месяц или 30 февраля (которая будет преобразована в 28/29 февраля).
| Исходная дата | ДАТАМЕС(A1;9) | Формула с ЕСЛИОШИБКА | Правильный результат |
|---|---|---|---|
| 31.01.2026 | 30.10.2026 | 31.10.2026 | 31.10.2026 |
| 30.04.2026 | 30.01.2026 | 30.01.2026 | 30.01.2026 |
| 29.02.2026 | 29.11.2026 | 29.11.2026 | 29.11.2026 |
| 31.12.2026 | 30.09.2026 | 30.09.2026 | 30.09.2026 |
Способ 4: Использование Power Query для массового добавления месяцев
Если вам нужно прибавить 9 месяцев к сотням или тысячам дат, ручное применение формул неэффективно. В этом случае поможет Power Query (доступен в Excel 2016 и новее):
- Выделите диапазон с датами и перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query добавьте настраиваемый столбец с формулой:
=Date.AddMonths([ВашаДата], 9) - Нажмите
Закрыть и загрузить— новые даты появятся в отдельном столбце.
Преимущества Power Query:
- 🔹 Обрабатывает миллионы строк без замедления.
- 🔹 Автоматически обновляет результаты при изменении исходных данных.
- 🔹 Поддерживает сложные преобразования (например, добавление месяцев с учётом рабочих дней).
⚠️ Внимание: Power Query использует M-язык, где месяцы считаются с учётом календарных правил, но для дат вроде31.01.2026он всё равно вернёт30.10.2026. Чтобы исправить это, добавьте ещё один шаг с заменой:= if Date.Day([НоваяДата]) < Date.Day([ИсходнаяДата]) then Date.EndOfMonth([НоваяДата]) else [НоваяДата]Способ 5: VBA-скрипт для гибких расчётов
Если вам нужна максимальная гибкость (например, добавление месяцев с учётом рабочих дней или праздников), напишите простой макрос на VBA:
Function AddMonths(ByVal d As Date, ByVal months As Integer) As DateAddMonths = DateSerial(Year(d), Month(d) + months, Day(d))
If Day(AddMonths) <> Day(d) Then
AddMonths = DateSerial(Year(AddMonths), Month(AddMonths) + 1, 0)
End If
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA.- Вставьте код в новый модуль (
Insert → Module).- Вернитесь в Excel и используйте функцию как обычно:
=AddMonths(A1; 9).Этот скрипт:
- 🔹 Корректно обрабатывает"выпадающие" даты (например,
31.01.2026 + 9 месяцев = 31.10.2026).- 🔹 Работает в всех версиях Excel, включая 2003.
- 🔹 Можно модифицировать для учёта праздников или рабочих календарей.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот самые распространённые:
- Формат ячейки не"Дата": Если ячейка отформатирована как текст, Excel воспримет
15.06.2026как строку, а не дату. Чтобы исправить, выделите ячейку и выберите форматДатана вкладкеГлавная.- Использование простого сложения: Формула
=A1+9прибавляет 9 дней, а не месяцев. Для месяцев нужны специальные функции.- Игнорирование високосных лет: 29 февраля 2026 года + 12 месяцев должно дать 29 февраля 2026 года, но если 2026 не високосный, формула может вернуть ошибку.
- Переполнение диапазона дат: Excel поддерживает даты с 01.01.1900 по 31.12.9999. Прибавление 9 месяцев к
31.12.9999вернёт ошибку.Чтобы проверить, корректна ли ваша дата, используйте функцию
ДАТАЗНАЧ:=ЕСЛИ(ДАТАЗНАЧ(A1)=A1;"Дата корректна";"Ошибка формата")FAQ: Ответы на частые вопросы
Можно ли прибавить 9 месяцев к дате без функций, только арифметически?
Технически да, но это ненадёжно. Например, формула
=A1+270(9 месяцев ≈ 270 дней) вернёт приблизительный результат, но не учтёт точную длину месяцев. Для точности используйтеДАТАМЕС.Почему функция ДАТАМЕС возвращает 30.11.2026 для даты 31.01.2026 + 10 месяцев?
Потому что в октябре 31 день, а в ноябре — 30.
ДАТАМЕСавтоматически корректирует дату до последнего дня месяца, если исходный день"выпадает". Чтобы сохранить 31-е число, используйте формулу из Способа 3.Как прибавить 9 месяцев к дате в Google Таблицах?
В Google Sheets используется та же функция
EDATE(илиДАТАМЕСна русском). Синтаксис идентичен Excel. Для"выпадающих" дат применяйте=ARRAYFORMULA(EOMONTH(EDATE(A1;9);-1)).Можно ли прибавить к дате 9 рабочих месяцев (исключая выходные)?
Да, но это требует комбинации функций. Пример для 9 месяцев по 20 рабочих дней:
=РАБДЕНЬ(A1; 9*20)Для точного расчёта с учётом праздников добавьте второй аргумент с диапазоном праздничных дат.
Почему после добавления месяцев дата отображается как число (например, 45678)?
Это происходит, потому что ячейка имеет формат
ОбщийилиЧисловой. Измените формат наДата(Ctrl+1 → Число → Дата).