Как посчитать дни просрочки в Excel: 5 способов с формулами и примерами

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

В этой статье разберём 5 проверенных способов посчитать просрочку — от простых формул до сложных вычислений с учётом рабочих дней и праздников. Вы узнаете, как автоматизировать процесс, избежать типичных ошибок и адаптировать решения под свои задачи. Все примеры актуальны для Excel 2019–2026 и Excel Online.

Особое внимание уделим динамическим расчётам, где дата проверки обновляется автоматически (например, с функцией СЕГОДНЯ()), а также статическим отчётам, где фиксируется конкретный день анализа. В конце статьи — FAQ с ответами на частые вопросы и таблица сравнения методов.

1. Базовый расчёт: функция ДАТАРАЗН для простых случаев

Если вам нужно быстро посчитать количество дней между двумя датами — например, сроком оплаты и фактической датой платежа — достаточно функции ДАТАРАЗН (или её английского аналога DATEDIF). Она скрыта в списке функций, но работает во всех версиях Excel.

Формула имеет синтаксис:

=ДАТАРАЗН(начальная_дата; конечная_дата; "D")

Где "D" — код для вычисления разницы в днях. Например, если срок оплаты был 15.05.2026, а клиент заплатил 20.05.2026, формула вернёт 5 дней просрочки.

  • Плюсы: простая, не требует дополнительных настроек.
  • Минусы: не учитывает выходные и праздники, может возвращать ошибку #ЧИСЛО! при неверном формате дат.

Пример для ячейки C2, где A2 — дата дедлайна, а B2 — дата выполнения:

=ЕСЛИ(B2>A2; ДАТАРАЗН(A2; B2; "D"); 0)

Эта формула вернёт количество дней просрочки, если задача выполнена позже срока, или 0, если в срок.

2. Динамический расчёт с функцией СЕГОДНЯ()

Когда нужно отслеживать просрочку на текущий момент (например, для мониторинга долгов или задач), используйте комбинацию СЕГОДНЯ() и ДАТАРАЗН. Функция СЕГОДНЯ() автоматически обновляет дату при каждом пересчёте листа.

Формула для ячейки D2, где C2 — дата дедлайна:

=ЕСЛИ(C2<СЕГОДНЯ(); ДАТАРАЗН(C2; СЕГОДНЯ(); "D"); 0)
⚠️ Внимание: Если книга сохранена в формате .xls (Excel 97–2003), функция СЕГОДНЯ() не будет обновляться при открытии файла. Используйте формат .xlsx или .xlsm.
  • 📅 Пример: Если дедлайн был 10.06.2026, а сегодня 15.06.2026, формула вернёт 5.
  • Нюанс: Чтобы отключить автоматическое обновление, перейдите в Формулы → Параметры вычислений → Вручную.
📊 Как часто вы используете динамические даты в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

3. Учёт рабочих дней: функция ЧИСТРАБДНИ

В бизнес-задачах просрочка часто считается только по рабочим дням (понедельник–пятница). Для этого в Excel есть функция ЧИСТРАБДНИ (англ. NETWORKDAYS). Она исключает субботы, воскресенья иoptional праздничные даты.

Синтаксис:

=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])

Где [праздники] — необязательный диапазон с датами праздников (например, A1:A10).

Пример для просрочки с учётом выходных:

=ЕСЛИ(B2>A2; ЧИСТРАБДНИ(A2; B2); 0)
Как добавить праздники в расчёт?

Создайте отдельный столбец с датами праздников (например, 01.01.2026, 07.01.2026 и т.д.). Затем укажите этот диапазон третьим аргументом в функции: =ЧИСТРАБДНИ(A2; B2; $D$2:$D$10)

Функция Учитывает выходные Учитывает праздники Динамический расчёт
ДАТАРАЗН ❌ Нет ❌ Нет ✅ Да (с СЕГОДНЯ())
ЧИСТРАБДНИ ✅ Да ✅ Да (опционально) ✅ Да
РАЗНДАТ ❌ Нет ❌ Нет ✅ Да

4. Продвинутый метод: функция РАЗНДАТ

Функция РАЗНДАТ (англ. DAYS в новых версиях) возвращает разницу между датами в днях, но в отличие от ДАТАРАЗН, она более гибкая и поддерживает отрицательные значения. Это удобно, если нужно отобразить "опережение" (например, задача выполнена раньше срока).

Формула:

=РАЗНДАТ(A2; B2; "d")

Где "d" — код для дней. Для просрочки используйте:

=МАКС(0; РАЗНДАТ(B2; A2; "d"))

Эта формула вернёт 0, если задача выполнена в срок или раньше, и количество дней просрочки в противном случае.

⚠️ Внимание: В Excel 2016 и новее РАЗНДАТ может выдавать ошибку при неверном формате дат. Преобразуйте данные в формат даты через Формат ячеек → Дата.
  • 🔄 Преимущество: Работает с отрицательными значениями (например, -3 означает опережение на 3 дня).
  • 📊 Применение: Идеально для аналитики, где важно видеть как просрочки, так и опережения.

5. Расчёт просрочки с учётом времени (часы и минуты)

Если дедлайн задан не только датой, но и временем (например, 15.06.2026 14:00), используйте комбинацию функций ДАТАЗН и ВРЕМЗН (англ. TIME). Это актуально для логистики, где важны даже часы задержки.

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

=ЕСЛИ((B2+C2)>(A2+D2); (B2+C2)-(A2+D2); 0)

Где:

  • A2 — дата дедлайна,
  • D2 — время дедлайна (например, 14:00),
  • B2 — фактическая дата,
  • C2 — фактическое время.

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

[d] "дн." h"ч." mm"мин."

Убедитесь, что даты и время в одном формате (например, дд.мм.гггг чч:мм)

Объедините дату и время в одной ячейке через формулу =A2+B2

Примените формат Дата к итоговым ячейкам

Проверьте настройки региональных параметров (Файл → Параметры → Язык)

-->

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

Даже простые формулы могут давать сбои из-за неочевидных нюансов. Вот TOP-5 ошибок при расчёте просрочки:

  1. Неверный формат ячеек. Если дата хранится как текст (например, "15.05.2026" в кавычках), формулы вернут ошибку. Исправляйте через Формат ячеек → Дата или функцию ДАТАЗНАЧ.
  2. Пустые ячейки. Формулы вроде ДАТАРАЗН возвращают #ЗНАЧ!, если одна из дат отсутствует. Используйте ЕСЛИОШИБКА:
  3. =ЕСЛИОШИБКА(ДАТАРАЗН(A2; B2; "D"); "")
  4. Разные временные зоны. Если данные импортированы из внешних источников (например, или CRM), даты могут сдвигаться на ±1 день. Проверяйте исходные данные.
  5. Округление. Функции вроде ЧИСТРАБДНИ могут округлять результаты. Для точности используйте ОКРУГЛВВЕРХ:
  6. =ОКРУГЛВВЕРХ(ЧИСТРАБДНИ(A2; B2); 0)
  7. Забытые праздники. Если не указать диапазон праздников в ЧИСТРАБДНИ, они будут учитываться как рабочие дни.

Критическая ошибка: функция СЕГОДНЯ() не обновляется в защищённых листах. Чтобы это исправить, снимите защиту (Рецензирование → Снять защиту листа) или используйте VBA-скрипт для принудительного пересчёта.

7. Автоматизация: VBA-скрипт для массового расчёта

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

Пример скрипта для столбца E (просрочка в днях), где C — дата дедлайна, D — дата выполнения:

Sub CalculateOverdue()

Dim ws As Worksheet

Dim lastRow As Long

Set ws = ActiveSheet

lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

For i = 2 To lastRow

If ws.Cells(i, "D").Value > ws.Cells(i, "C").Value Then

ws.Cells(i, "E").Value = DateDiff("d", ws.Cells(i, "C").Value, ws.Cells(i, "D").Value)

Else

ws.Cells(i, "E").Value = 0

End If

Next i

End Sub

Чтобы запустить макрос:

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

⚠️ Внимание: Перед запуском макроса сохраните книгу в формате .xlsm (с поддержкой макросов), иначе скрипт не сработает.

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

Как посчитать просрочку, если дата дедлайна пустая?

Используйте функцию ЕСЛИ с проверкой на пустоту:

=ЕСЛИ(ИЛИ(A2=""; B2=""); ""; ЕСЛИ(B2>A2; ДАТАРАЗН(A2; B2; "D"); 0))

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

Можно ли посчитать просрочку в часах, а не в днях?

Да, умножьте результат ДАТАРАЗН на 24 (количество часов в сутках):

=ДАТАРАЗН(A2; B2; "D") * 24

Для минут умножьте на 1440 (24×60).

Почему функция ЧИСТРАБДНИ возвращает неверное количество дней?

Скорее всего, не указан диапазон праздников или неправильно задан формат дат. Проверьте:

  1. Формат ячеек с датами (Формат → Дата).
  2. Диапазон праздников (должен быть в формате даты).
  3. Региональные настройки (Файл → Параметры → Язык).
Как зафиксировать текущую дату, чтобы она не обновлялась?

Замените СЕГОДНЯ() на статическое значение:

  1. Введите в ячейку =СЕГОДНЯ().
  2. Скопируйте ячейку (Ctrl + C).
  3. Выделите её же и выполните Специальная вставка → Значения (Ctrl + Alt + V → В).

Теперь дата не будет меняться при пересчёте.

Можно ли посчитать просрочку с учётом рабочих часов (например, только с 9:00 до 18:00)?

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

=ЕСЛИ(И(B2>A2; ЧАС(B2)>=9; ЧАС(B2)<=18); ЧИСТРАБДНИ(A2; B2) - 1; 0)

Эта формула учитывает только полные рабочие дни (с 9:00 до 18:00). Для точного расчёта часов потребуется кастомизация.