Как рассчитать дату в Excel: формулы, примеры и лайфхаки

Почему расчёт дат в Excel — это не так просто, как кажется

На первый взгляд, работа с датами в Microsoft Excel или Google Таблицах кажется тривиальной: ввёл число в формате ДД.ММ.ГГГГ, и готово. Но стоит попытаться прибавить к дате 30 дней, вычесть 2 месяца или посчитать количество рабочих дней между двумя датами — и начинаются проблемы. Excel хранит даты как последовательные числа (начиная с 1 января 1900 года = 1), а это означает, что любые операции с ними требуют знания специальных функций.

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

1. Базовая арифметика: прибавление и вычитание дней

Самый простой способ изменить дату — сложить или вычесть количество дней. Excel автоматически преобразует результат в корректный формат даты, если ячейка отформатирована соответствующим образом.

Примеры формул:

  • 📅 Прибавить 15 дней к дате в ячейке A1:
    =A1+15
  • 🗓️ Вычесть 7 дней из текущей даты:
    =TODAY()-7
  • 🔄 Узнать дату через 90 дней от сегодня:
    =TODAY()+90

⚠️ Внимание: Если результат отображается как число (например, 45678), проверьте формат ячейки. Выделите её, нажмите Ctrl+1 (или правой кнопкой → Формат ячеек) и выберите категорию Дата.

ФормулаРезультат (если сегодня 15.05.2026)Пояснение
=A1+30 (где A1 = 10.05.2026)09.06.2026Прибавление 30 дней с учётом количества дней в мае
=TODAY()-36515.05.2023Дата ровно год назад
=DATE(2026;12;31)-TODAY()230Количество дней до Нового года

2. Работа с месяцами и годами: функции EDATE и DATE

Прибавление или вычитание месяцев — более сложная задача из-за разного количества дней в них. Здесь на помощь приходят специализированные функции:

  • 📆 EDATE(стартовая_дата; количество_месяцев) — сдвигает дату на указанное количество месяцев, сохраняя день. Если в целевом месяце меньше дней (например, 31 января + 1 месяц), функция вернёт последнее число месяца (28/29 февраля).
  • 🗂️ DATE(год; месяц; день) — создаёт дату из отдельных компонентов. Полезно для динамического построения дат.

Примеры:

=EDATE("15.01.2026"; 3)  → 15.04.2026

=EDATE("31.01.2026"; 1) → 29.02.2026 (високосный год)

=DATE(2026; 12; 31) → 31.12.2026

⚠️ Внимание: Функция EDATE доступна только в Excel 2007 и новее. В старых версиях используйте комбинацию DATE с вычислениями:

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

Убедитесь, что целевой месяц существует (не 13-й или 0-й)

Проверьте високосный год для февраля

Сравните результат с календарём для краевых случаев (31-е число)

Используйте EDATE вместо ручных вычислений, если возможно-->

3. Расчёт рабочих дней: функция WORKDAY

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

=WORKDAY(стартовая_дата; количество_дней; [праздники])

Примеры:

  • 🏢 Рассчитать дату через 10 рабочих дней от сегодня:
    =WORKDAY(TODAY(); 10)
  • 🎉 Учесть праздники (например, в ячейках D1:D5):
    =WORKDAY("01.05.2026"; 5; D1:D5)

Для обратного расчёта (сколько рабочих дней между двумя датами) используйте NETWORKDAYS:

=NETWORKDAYS("01.05.2026"; "31.05.2026"; D1:D5)

Ежедневно

1-2 раза в неделю

Редко, но метко

Никогда не использовал-->

4. Разница между датами: функции DATEDIF и DAYS

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

  • 📏 DATEDIF(дата1; дата2; "единица") — универсальная функция для расчёта разницы в днях ("d"), месяцах ("m") или годах ("y"). Пример:
    =DATEDIF("01.01.2020"; TODAY(); "y")
    вернёт количество полных лет.
  • 📅 DAYS(дата2; дата1) — возвращает разницу в днях (аналог DATEDIF(;;"d")).

⚠️ Внимание: Функция DATEDIF не документирована в официальной справке Excel, но работает во всех версиях. Она чувствительна к порядку аргументов: первая дата должна быть раньше второй!

ФормулаРезультат (на 15.05.2026)Пояснение
=DATEDIF("01.01.2026"; TODAY(); "d")136Дней с начала года
=DATEDIF("15.05.2023"; TODAY(); "m")12Полных месяцев с прошлого мая
=DAYS(TODAY(); "31.12.2026")-230Отрицательное значение = дата в будущем

5. Продвинутые сценарии: последний день месяца, возраст, кварталы

Для нестандартных задач потребуются комбинации функций:

  1. Последний день месяца:
    =ДАТА(ГОД(A1); МЕСЯЦ(A1)+1; 0)

    Пример: для 15.05.2026 вернёт 31.05.2026.

  2. Возраст в годах (с учётом дня рождения):
    =DATEDIF("15.05.1990"; TODAY(); "y")

    Вернёт 34, если сегодня до 15.05.2026, и 35 после.

  3. Номер квартала:
    =ROUNDUP(MONTH(A1)/3; 0)

    Для мая (5) вернёт 2 (II квартал).

💡 Лайфхак: Чтобы выделить ячейки с датами, которые уже прошли, используйте Условное форматированиеПравила выделения ячеекДатаПрошедшая.

Как Excel хранит даты внутренне?

Excel преобразует даты в последовательные числа, где 1 = 1 января 1900 года (в Windows) или 1904 года (в Mac по умолчанию). Например, 45396 — это 15.05.2026. Время хранится как дробная часть: 45396,5 = полдень 15.05.2026.

6. Ошибки и их исправление

Типичные проблемы при работе с датами:

  • #ЗНАЧ! — неправильный формат данных (например, текст вместо даты). Решение: проверьте формат ячейки или используйте =ДАТАЗНАЧ("15.05.2026") для преобразования текста в дату.
  • #ЧИСЛО! — недопустимая дата (например, 30 февраля). Решение: проверьте корректность вводимых значений.
  • ❌ Дата отображается как число — ячейка имеет общий формат. Решение: измените формат на Дата.

🔍 Диагностика: Чтобы проверить, распознаёт ли Excel значение как дату, используйте функцию ТИП(A1). Если результат 1 — это число (включая даты), 2 — текст.

7. Динамические даты: автоматическое обновление

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

  • 🔄 TODAY() — текущая дата (обновляется автоматически).
  • NOW() — текущие дата и время.
  • 📅 =EOMONTH(TODAY(); 0) — последний день текущего месяца.

⚠️ Внимание: Эти функции пересчитываются при каждом изменении книги или открытии файла. Если вам нужна фиксированная дата (например, дата создания отчёта), введите её вручную (Ctrl+;) или используйте =SECOND(NOW()) в скрытой ячейке — это заставит Excel "зафиксировать" момент.

FAQ: Частые вопросы о расчёте дат в Excel

Как прибавить к дате 1 год, если год високосный?

Используйте функцию DATE с учётом года:

=ДАТА(ГОД(A1)+1; МЕСЯЦ(A1); ДЕНЬ(A1))
. Для 29.02.2026 результат будет 28.02.2026 (невисокосный год). Чтобы всегда получать 29 февраля, добавьте проверку:
=ЕСЛИ(И(МЕСЯЦ(A1)=2; ДЕНЬ(A1)=29); ДАТА(ГОД(A1)+4; 2; 29); ДАТА(ГОД(A1)+1; МЕСЯЦ(A1); ДЕНЬ(A1)))
.

Можно ли в Excel посчитать дату Пасхи?

Да, для этого есть сложная формула, основанная на алгоритме Гаусса. Пример для григорианского календаря (XIX–XXI века):

=ЦЕЛОЕ(A1/100)

=ОСТАТ(A1;19)

=ОСТАТ(A1;4)

=ОСТАТ(A1;7)

=ЦЕЛОЕ((19*B2+M)/30)

=ЦЕЛОЕ((2*C2+4*D2+6*E2+N)/7)

=ЕСЛИ(И(E2+F2>9; A1>1999); E2+F2-7; E2+F2)+22

=ДАТА(A1;3;G2)

Где A1 — год. Формула вернёт дату Пасхи в этом году.

Как посчитать количество будних дней между датами без учёта праздников?

Используйте функцию NETWORKDAYS без третьего аргумента:

=NETWORKDAYS("01.05.2026"; "31.05.2026")

Для мая 2026 года (где 1, 8, 9 мая — праздники, но не учтены) результат будет 21 (23 календарных дня минус 4 выходных).

Почему функция DATEDIF возвращает неверный результат?

Проверьте:

  1. Порядок аргументов: первая дата должна быть раньше второй.
  2. Формат ячеек: обе даты должны быть в формате Дата (не текст!).
  3. Единица измерения: для дней используйте "d", для месяцев — "m", для полных лет — "y".

Пример ошибки: =DATEDIF("31.12.2026"; "01.01.2026"; "d") вернёт #ЧИСЛО!.

Как вычесть из даты 1 месяц, если это 31 января?

Функция EDATE автоматически скорректирует дату на последнее число предыдущего месяца:

=EDATE("31.01.2026"; -1) → 31.12.2023

Если нужно сохранить номер дня (например, получить 31.12.2023 вместо 30.11.2023), используйте:

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

Но в декабре результат будет ошибочным (31.11.2023), поэтому лучше комбинировать с проверкой:

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