Контроль просроченных платежей, задач или контрактов — критически важная задача для бухгалтеров, менеджеров проектов и даже личного бюджета. Excel позволяет автоматизировать этот процесс с точностью до дня, учитывая рабочие/выходные дни, праздники и даже часовые пояса. Но как правильно составить формулу, чтобы избежать ошибок в расчётах?
Многие пользователи ошибочно считают, что достаточно вычесть одну дату из другой. На практике же требуется учитывать текущую дату (которая меняется ежедневно), рабочие календари (например, 5/2 или 6/1), а также особенности формата ячеек. В этой статье разберём универсальные формулы для расчёта просрочки, которые работают даже при изменении структуры таблицы — от простейших вариантов до сложных сценариев с учётом производственного календаря.
Вы научитесь:
- 📅 Использовать функции
СЕГОДНЯ(),ДАТА()иРАЗНДАТ()для динамических расчётов - ⏳ Рассчитывать просрочку с учётом выходных и праздников (включая региональные)
- 📊 Автоматизировать подсветку просроченных строк с помощью условного форматирования
- 🔄 Обновлять данные без ручного ввода — формулы будут пересчитываться сами
Базовая формула: разница между датами
Самый простой способ узнать количество дней просрочки — вычесть дату исполнения из текущей даты. Для этого в Excel есть функция СЕГОДНЯ(), которая всегда возвращает актуальную дату.
Пример формулы:
=СЕГОДНЯ()-B2
где B2 — ячейка с датой, до которой нужно было выполнить задачу или оплатить счёт.
Если результат положительный — это и есть количество дней просрочки. Отрицательное значение означает, что срок ещё не наступил. Чтобы скрыть отрицательные значения (они не нужны для анализа просрочки), оберните формулу в ЕСЛИ():
=ЕСЛИ(СЕГОДНЯ()-B2>0; СЕГОДНЯ()-B2; "")
⚠️ Внимание: ФункцияСЕГОДНЯ()пересчитывается при каждом открытии файла или изменении данных. Если вам нужно зафиксировать дату расчёта (например, для отчёта на конкретный день), используйтеCTRL+;для вставки статической даты.
Этот метод подходит для большинства задач, но не учитывает выходные и праздничные дни. Если ваш график работы — 5/2 (пять рабочих дней, два выходных), то реальная просрочка может быть меньше.
Учёт рабочих и выходных дней
Для расчёта просрочки только по рабочим дням используйте функцию ЧИСТРАБДНИ() (англ. NETWORKDAYS). Она автоматически исключает субботу и воскресенье, а также позволяет добавить список праздников.
Синтаксис:
=ЧИСТРАБДНИ(дата_начала; дата_окончания; [праздники])
Пример для расчёта просрочки с учётом выходных:
=ЕСЛИ(СЕГОДНЯ()>B2; ЧИСТРАБДНИ(B2; СЕГОДНЯ(); D2:D10); "")
где D2:D10 — диапазон с датами праздников (например, 1 января, 8 марта и т.д.).
Если праздничные дни не указаны, функция просто пропустит субботу и воскресенье. Для России или Украины можно скачать официальный производственный календарь и импортировать его в Excel.
| Функция | Назначение | Пример |
|---|---|---|
СЕГОДНЯ() |
Возвращает текущую дату | =СЕГОДНЯ()-B2 |
ЧИСТРАБДНИ() |
Считает рабочие дни между датами | =ЧИСТРАБДНИ(B2; СЕГОДНЯ()) |
РАЗНДАТ() |
Универсальная разница между датами | =РАЗНДАТ(B2; СЕГОДНЯ(); "d") |
ДАТА() |
Создаёт дату из года, месяца, дня | =ДАТА(2026; 12; 31) |
⚠️ Внимание: ФункцияЧИСТРАБДНИ()в некоторых версиях Excel (до 2010) называласьРАБДЕНЬ(). Если формула не работает, проверьте название функции в вашей версии или используйте англоязычнуюNETWORKDAYS.
Для более гибкого учёта рабочих дней (например, если у вас нестандартный график, как 2/2) придётся использовать комбинацию функций ЕСЛИ() и ДЕНЬНЕД():
=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ДВССЫЛ("A"&ПОСЛЕДНИЙ(A:A))):СЕГОДНЯ()))<>7); --(ДЕНЬНЕД(СТРОКА(ДВССЫЛ("A"&ПОСЛЕДНИЙ(A:A))):СЕГОДНЯ()))<>1))
Эта формула подсчитывает все дни, кроме субботы (7) и воскресенья (1). Для других графиков замените числа на соответствующие дни недели.
Функция РАЗНДАТ: универсальный инструмент
Функция РАЗНДАТ() (англ. DATEDIF) — одна из самых мощных для работы с датами, но она скрытая (не отображается в списке функций). Она позволяет рассчитывать разницу не только в днях, но и в месяцах или годах.
Синтаксис:
=РАЗНДАТ(дата_начала; дата_окончания; "единица_измерения")
Для расчёта просрочки в днях используйте:
=РАЗНДАТ(B2; СЕГОДНЯ(); "d")
Преимущества РАЗНДАТ():
- 📌 Работает даже с отрицательными датами (до 1900 года)
- 📌 Поддерживает нестандартные форматы (например, "md" — разница в месяцах без учёта дней)
- 📌 Точнее, чем простое вычитание дат, при работе с временными зонами
Пример использования для сложных сценариев:
=ЕСЛИ(РАЗНДАТ(B2; СЕГОДНЯ(); "d")>30; "Просрочка более месяца"; ЕСЛИ(РАЗНДАТ(B2; СЕГОДНЯ(); "d")>0; "Просрочка " & РАЗНДАТ(B2; СЕГОДНЯ(); "d") & " дней"; "В срок"))
Автоматическая подсветка просроченных строк
Визуальное выделение просроченных задач или платежей помогает быстро оценить ситуацию. Для этого используйте условное форматирование:
- Выделите диапазон ячеек (например,
A2:D100). - Перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу:
=СЕГОДНЯ()-$B2>0где
$B2— первая ячейка столбца с датами. - Задайте формат (например, красный фон или шрифт).
Для более гибкого форматирования (например, разные цвета для просрочки 1–7 дней и более 7 дней) создайте несколько правил:
- 🔴
=И(СЕГОДНЯ()-$B2>0; СЕГОДНЯ()-$B2<=7)— оранжевый цвет - 🟠
=СЕГОДНЯ()-$B2>7— красный цвет - 🟢
=СЕГОДНЯ()-$B2<=0— зелёный цвет (в срок)
Чтобы правило работало для всей таблицы, используйте абсолютные ссылки на столбец (например, $B2 вместо B2). Это позволит копировать формулу на другие строки без ошибок.
Убедитесь, что столбец с датами имеет формат "Дата"|Используйте абсолютные ссылки ($B2) для столбца|Проверьте приоритет правил (меню "Управление правилами")|Тестируйте на реальных данных с просрочкой 1, 7 и 30 дней|Сохраните шаблон для повторного использования-->
Расчёт просрочки с учётом времени (часов и минут)
Если вам нужно учитывать не только дни, но и время (например, для задач с дедлайном до 18:00), используйте комбинацию даты и времени. Excel хранит даты и время как числа, где целая часть — это день, а дробная — время.
Пример формулы для расчёта просрочки в часах:
=(СЕГОДНЯ()+СЕЙЧАС()-B2)*24
где B2 — ячейка с датой и временем дедлайна (например, 15.10.2026 18:00).
Чтобы получить просрочку в минутах, умножьте результат на 1440 (количество минут в сутках):
=(СЕГОДНЯ()+СЕЙЧАС()-B2)*1440
Для округления до целых часов или минут используйте функции ОКРУГЛ() или ЦЕЛОЕ():
=ЦЕЛОЕ((СЕГОДНЯ()+СЕЙЧАС()-B2)*24) & " часов и " & ОКРУГЛ((СЕГОДНЯ()+СЕЙЧАС()-B2)*24-ЦЕЛОЕ((СЕГОДНЯ()+СЕЙЧАС()-B2)*24); 0) & " минут"
⚠️ Внимание: ФункцияСЕЙЧАС()обновляется при каждом изменении файла, что может замедлять работу больших таблиц. Для отчётов используйте статическое время: нажмитеCTRL+Shift+;для вставки текущего времени.
Если вам нужно учитывать рабочее время (например, с 9:00 до 18:00), формула усложняется. В этом случае лучше создать отдельную таблицу с рабочими интервалами и использовать СУММПРОИЗВ() для подсчёта только рабочих часов.
Продвинутые сценарии: динамические отчёты и сводные таблицы
Для анализа просрочек по нескольким проектам или контрагентам полезно использовать сводные таблицы и Power Query.
Шаг 1. Подготовка данных
Убедитесь, что ваша таблица содержит:
- 📌 Столбец с уникальным идентификатором (например, номер договора)
- 📌 Дату исполнения (
Дата_дедлайна) - 📌 Статус (можно рассчитать формулой
=ЕСЛИ(СЕГОДНЯ()-B2>0; "Просрочено"; "В срок")) - 📌 Количество дней просрочки (рассчитанное ранее)
Шаг 2. Создание сводной таблицы
- Выделите диапазон данных.
- Перейдите на вкладку
Вставка → Сводная таблица. - В настройках сводной таблицы добавьте:
- 📊
Номер договорав область "Строки" - 📊
Дни просрочкив область "Значения" (опция "Сумма" или "Среднее") - 📊
Статусв область "Фильтры"
- 📊
Шаг 3. Автоматическое обновление
Чтобы сводная таблица обновлялась при открытии файла:
- Щёлкните правой кнопкой по сводной таблице.
- Выберите
Параметры сводной таблицы. - На вкладке
Данныепоставьте галочкуОбновлять при открытии файла. - 🔄 Объединять данные из нескольких файлов
- 📅 Добавлять столбцы с расчётом просрочки
- 📊 Создавать динамические дашборды
Для ещё более гибкого анализа используйте Power Query (вкладка Данные → Получить данные). С его помощью можно:
Как импортировать производственный календарь в Power Query?
1. Скачайте календарь в формате Excel или CSV (например, с сайта КонсультантПлюс).
2. В Power Query выберите Данные → Получить данные → Из файла → Из книги Excel.
3. Загрузите данные в редактор запросов.
4. Добавьте столбец с формулой для проверки, является ли дата праздничной:
= Table.AddColumn(#"Предыдущий шаг", "Праздник", each if List.Contains(Праздники[Дата], [Date]) then "Да" else "Нет")
5. Сохраните и загрузите данные в Excel.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчёте просрочки. Вот самые распространённые:
- Неправильный формат ячеек
Если ячейка с датой отформатирована как текст, Excel не сможет правильно вычислить разницу. Проверьте формат: выделите ячейку →
Главная → Формат → Формат ячеек → Дата. - Игнорирование високосных лет
Функции
РАЗНДАТ()иЧИСТРАБДНИ()учитывают високосные годы автоматически, но если вы используете ручные расчёты (например, умножаете дни на 24 для часов), могут возникнуть ошибки. Всегда используйте встроенные функции. - Статические даты вместо динамических
Если вместо
СЕГОДНЯ()вы ввели дату вручную (например,=B2-"15.10.2026"), формула не будет обновляться. Всегда используйтеСЕГОДНЯ()илиСЕЙЧАС(). - Неучёт часовых поясов
Если даты приходят из разных систем (например, 1C и Excel), проверьте, что они приведены к одному часовому поясу. Используйте
=B2-(1/24)для корректировки на 1 час.
Чтобы проверить корректность расчётов, используйте тестовые данные:
- 📅 Введите дату дедлайна
01.01.2026и убедитесь, что формула показывает правильное количество дней просрочки. - 📅 Проверьте граничные случаи: дедлайн
вчера,сегодня,завтра. - 📅 Убедитесь, что формула работает для дат в разных форматах (
ДД.ММ.ГГГГ,ММ/ДД/ГГ).
FAQ: Ответы на частые вопросы
Как рассчитать просрочку, если дедлайн указан в виде "30 дней с момента заключения договора"?
Используйте функцию ДАТА() для добавления дней к начальной дате:
=СЕГОДНЯ()-ДАТА(ГОД(B2); МЕСЯЦ(B2); ДЕНЬ(B2)+30)
где B2 — дата заключения договора. Для точного расчёта (с учётом конца месяца) лучше использовать РАЗНДАТ():
=РАЗНДАТ(B2; СЕГОДНЯ(); "d")-30
Можно ли рассчитать просрочку в Google Таблицах?
Да, все описанные функции работают и в Google Таблицах, за исключением РАЗНДАТ() (там она называется DATEDIF). Примеры:
=TODAY()-B2
=NETWORKDAYS(B2; TODAY())
Также в Google Таблицах есть функция =WORKDAY() для добавления рабочих дней к дате.
Как учитывать региональные праздники (например, только для Москвы)?
Создайте отдельный лист с перечнем праздников для вашего региона и ссылайтесь на него в функции ЧИСТРАБДНИ():
=ЧИСТРАБДНИ(B2; СЕГОДНЯ(); Праздники_MSK!A2:A20)
Где Праздники_MSK!A2:A20 — диапазон с датами московских праздников.
Почему формула возвращает ###### вместо числа?
Это означает, что столбец слишком узкий для отображения даты. Растяните столбец или измените формат ячейки на "Общий". Также проверьте, что результат формулы не превышает 9999 дней (максимальное значение для формата "Дата" в Excel).
Как рассчитать проценты за просрочку (пени)?
Используйте формулу:
=ЕСЛИ(СЕГОДНЯ()-B2>0; (СЕГОДНЯ()-B2)*C2*D2/100; 0)
где:
B2— дата дедлайна,C2— сумма долга,D2— процент пени за день.
Для учёта рабочих дней замените СЕГОДНЯ()-B2 на ЧИСТРАБДНИ(B2; СЕГОДНЯ()).