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

Работа с датами в Microsoft Excel — одна из самых востребованных задач в бизнес-среде. Бухгалтерам нужно отслеживать просроченные платежи, логистам — истекающие сроки поставок, а HR-специалистам — завершение контрактов с сотрудниками. Ошибка в расчетах может обернуться штрафами, потерянными клиентами или судебными исками. Эта статья поможет автоматизировать поиск просрочек с помощью встроенных инструментов Excel — от элементарных фильтров до продвинутых формул массивов и Power Query.

Мы разберём 7 методов разной сложности: от ручной проверки до полностью автоматизированных решений. Вы узнаете, как выделить просроченные строки цветом, отсортировать их в отдельный список, а также настроить уведомления о приближающихся сроках. Особое внимание уделим типичным ошибкам при работе с датами — например, почему формула =СЕГОДНЯ()-A1>30 может давать неверные результаты при копировании.

Все примеры адаптированы для Excel 2019–2026 и Microsoft 365, но большинство методов работают и в старых версиях (2010–2016) с незначительными корректировками. Для владельцев MacOS укажем ключевые отличия в синтаксисе формул.

1. Базовый метод: условное форматирование по дате

Самый визуально наглядный способ выделить просроченные записи — использовать условное форматирование. Этот метод не требует знания формул и подходит для таблиц любого размера. Рассмотрим пошаговую инструкцию на примере списка договоров с колонкой Дата окончания.

Перейдите на вкладку ГлавнаяУсловное форматированиеСоздать правило. В открывшемся окне выберите Форматировать только ячейки, которые содержат. В поле правила укажите:

  • 📅 Форматировать все ячейки на основе их значений → выберите формат Дата
  • 🔴 Меньше чем → введите =СЕГОДНЯ() (или =TODAY() для английской версии)
  • 🎨 Формат → задайте красный цвет шрифта или заливки

Для динамического обновления дат (например, если вы открываете файл через неделю) используйте абсолютную ссылку на ячейку с текущей датой. Создайте отдельную ячейку (например, $Z$1) с формулой =СЕГОДНЯ(), а в правиле форматирования ссылайтесь на неё: =$A1<$Z$1, где A1 — первая ячейка с датой окончания.

Тип данных Формула для правила Пример отображения
Просроченные даты =A1<СЕГОДНЯ() Красный текст на сером фоне
Срок истекает через 7 дней =И(A1>СЕГОДНЯ();A1<=СЕГОДНЯ()+7) Оранжевый текст
Дата равна сегодняшней =A1=СЕГОДНЯ() Жёлтая заливка

2. Фильтрация просроченных записей

Если вам нужно не просто выделить, а отобразить только просроченные строки, используйте стандартный фильтр. Выделите заголовки столбцов и нажмите ДанныеФильтр. В выпадающем списке колонки с датой выберите Фильтры по датеДо и укажите сегодняшнюю дату. Excel автоматически скроет все актуальные записи.

Для более гибкой фильтрации создайте расширенный фильтр:

  1. Добавьте над таблицей строку с критерием (например, в ячейке B1 напишите "Просрочено").
  2. В ячейке под критерием (B2) введите формулу =A2<СЕГОДНЯ(), где A2 — первая ячейка с датой.
  3. Перейдите в ДанныеРасширенный фильтр → укажите диапазон исходных данных и диапазон критериев.

Создать строку с заголовком критерия|Ввести формулу сравнения с СЕГОДНЯ()|Указать диапазон данных без заголовков|Выбрать опцию "Скопировать результат в другое место" (при необходимости)-->

Обратите внимание: расширенный фильтр не обновляется автоматически. При изменении данных в таблице его нужно запускать повторно. Для динамического отображения лучше использовать Таблицы Excel (сочетание клавиш Ctrl+T) с последующей фильтрацией.

Условное форматирование|Фильтры|Формулы|Power Query|Другой способ-->

3. Формулы для расчёта просрочки

Когда требуется не только найти, но и посчитать количество дней просрочки или присвоить статус ("Актуально"/"Просрочено"), без формул не обойтись. Рассмотрим три ключевые функции:

  • 📊 =ЕСЛИ(A1<СЕГОДНЯ();"Просрочено";"Актуально") — простая проверка статуса
  • =МАКС(0;СЕГОДНЯ()-A1) — количество дней просрочки (0, если срок не истёк)
  • ⚠️ =ЕСЛИОШИБКА(СЕГОДНЯ()-A1;"") — игнорирует пустые ячейки

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

=ЕСЛИ(A1<СЕГОДНЯ();ЧИСТРАБДНИ(A1;СЕГОДНЯ());0)

Если в вашей организации нестандартный график (например, рабочая суббота), укажите его в третьем аргументе функции ЧИСТРАБДНИ как диапазон с праздничными датами.

⚠️ Внимание: Формулы с СЕГОДНЯ() пересчитываются при каждом открытии файла или изменении данных. Это может замедлить работу с большими таблицами (10 000+ строк). В таких случаях замените СЕГОДНЯ() на фиксированную дату в отдельной ячейке и обновляйте её вручную.

4. Power Query: автоматизация для больших данных

Когда таблица содержит тысячи строк или данные импортируются из внешних источников (1С, CRM, SQL), ручные методы становятся неэффективными. Здесь поможет Power Query — инструмент для преобразования и очистки данных. Алгоритм действий:

  1. Выделите исходную таблицу и нажмите ДанныеИз таблицы/диапазона (или Get Data → From Table/Range в английской версии).
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
    = if [Дата окончания] < DateTime.LocalNow() then "Просрочено" else "Актуально"
  3. Добавьте ещё один столбец для расчёта дней просрочки:
    = Duration.Days(DateTime.LocalNow() - [Дата окончания])
  4. Примените фильтр к новому столбцу, оставив только строки со статусом "Просрочено".
  5. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

Преимущество Power Query — возможность автоматически обновлять данные при изменении источника. Например, если вы подключили таблицу к базе 1С, достаточно нажать Обновить все на вкладке Данные, и просрочки пересчитаются с учётом актуальных данных.

Как обработать даты в текстовом формате?

Если даты в исходных данных хранятся как текст (например, "31.12.2026"), в Power Query добавьте шаг преобразования:

1. Выделите столбец с датой.

2. Перейдите на вкладку ПреобразованиеФормат данныхДата.

3. Если автоматическое распознавание не сработало, используйте функцию = DateTime.FromText([Столбец], "dd.MM.yyyy") в пользовательском столбце.

5. Сводные таблицы для анализа просрочек

Когда нужно не только найти просроченные записи, но и проанализировать их распределение (например, по отделам, контрагентам или типам договоров), создайте сводную таблицу. Алгоритм:

  1. Выделите исходную таблицу и нажмите ВставкаСводная таблица.
  2. В область Строки перетащите поле с категорией (например, "Отдел" или "Тип договора").
  3. В область Значения добавьте поле с датой, выбрав операцию Количество.
  4. Добавьте в таблицу вычисляемое поле для фильтрации просрочек:
    =ЕСЛИ(МАКС(Дата_окончания)<СЕГОДНЯ();1;0)
  5. Отфильтруйте сводную таблицу по вычисляемому полю, оставив только строки со значением 1.

Для визуализации добавьте срезы (ВставкаСрез) по ключевым полям (например, "Менеджер" или "Регион"). Это позволит быстро переключаться между категориями и анализировать просрочки в разрезе.

Тип анализа Инструмент Пример применения
Количество просрочек по отделам Сводная таблица Строки: "Отдел", Значения: "Количество просрочек"
Динамика просрочек по месяцам Сводная таблица + график Строки: "Месяц", Значения: "Количество", График: Гистограмма
Топ-5 контрагентов с просрочками Сводная таблица + сортировка Строки: "Контрагент", Значения: "Сумма просроченных платежей"

6. Автоматизация с помощью VBA

Если вам нужно отправлять уведомления о просрочках по email или автоматически обновлять отчёты, напишите простой макрос на VBA. Пример кода для выделения просроченных строк и создания отдельного листа с ними:

Sub FindOverdue()

Dim ws As Worksheet, newWs As Worksheet

Dim lastRow As Long, i As Long, newRow As Long

Dim dateCol As Integer

' Настройте номер столбца с датой

dateCol = 3 ' Столбец C

Set ws = ActiveSheet

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

' Создаём новый лист для просрочек

On Error Resume Next

Set newWs = ThisWorkbook.Sheets("Просрочено")

On Error GoTo 0

If newWs Is Nothing Then

Set newWs = ThisWorkbook.Sheets.Add(After:=ws)

newWs.Name = "Просрочено"

ws.Rows(1).Copy newWs.Rows(1)

Else

newWs.Cells.Clear

ws.Rows(1).Copy newWs.Rows(1)

End If

newRow = 2

For i = 2 To lastRow

If ws.Cells(i, dateCol).Value < Date Then

ws.Rows(i).Copy newWs.Rows(newRow)

newRow = newRow + 1

' Выделяем строку красным в исходной таблице

ws.Rows(i).Interior.Color = RGB(255, 200, 200)

End If

Next i

' Форматируем новый лист

newWs.Columns.AutoFit

MsgBox "Найдено " & newRow - 2 & " просроченных записей", vbInformation

End Sub

Чтобы макрос запускался автоматически при открытии файла, поместите его в процедуру Workbook_Open() в модуле ThisWorkbook. Для отправки email-уведомлений добавьте в код интеграцию с Outlook через объект MailItem.

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

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

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

  • 🗓️ Дата хранится как текст: Excel не распознаёт "31.12.2026" как дату. Исправьте с помощью ДАТАЗНАЧ() или Текст по столбцам.
  • 🔄 Формулы не обновляются: Если СЕГОДНЯ() возвращает вчерашнюю дату, проверьте настройки пересчёта (Формулы → Параметры вычислений → Автоматически).
  • Не учитывается время: Функция СЕГОДНЯ() не содержит времени. Для точных расчётов используйте ТДАТА().
  • 📅 Ошибка в региональных настройках: Если даты отображаются как "44197" (внутренний формат Excel), измените формат ячейки на Дата.

Особое внимание уделите разнице между 1900 и 1904 системами дат. В настройках Excel (Файл → Параметры → Дополнительно) проверьте, что выбрана опция 1900 система дат — иначе расчёты могут сбиваться на 4 года.

FAQ: Частые вопросы о поиске просрочек в Excel

Как найти просрочку, если дата указана в формате "31 декабря 2026 года"?

Используйте функцию =ДАТАЗНАЧ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" года";"");" "; ".")), где A1 — ячейка с текстовой датой. Для английского формата ("December 31, 2026") подойдёт =DATEVALUE(A1).

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

Да, с помощью Power Automate (ранее Microsoft Flow) или VBA. В Power Automate создайте поток, который:

  1. Читает файл Excel из OneDrive/SharePoint.
  2. Фильтрует строки с просроченными датами.
  3. Отправляет email через Outlook или Teams.

Для локальных файлов напишите VBA-макрос с таймером (Application.OnTime).

Почему формула =A1<СЕГОДНЯ() работает некорректно при копировании?

Скорее всего, в вашей таблице смешанные форматы данных: часть ячеек содержит настоящие даты, а часть — текст. Проверьте с помощью =ЕТЕКСТ(A1). Если функция возвращает ИСТИНА, преобразуйте текст в дату.

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

Используйте формулу =(СЕГОДНЯ()+СЕЙЧАС()-A1)*24, где A1 — ячейка с датой и временем. Для округления до целых часов оберните результат в =ОКРУГЛ().

Можно ли найти просрочки в Google Таблицах?

Да, все описанные методы работают и в Google Sheets, за исключением Power Query (там используется Apps Script). Основные отличия:

  • Функция СЕГОДНЯ() пишется как =TODAY().
  • Для условного форматирования используйте Custom formula is.
  • Макросы пишутся на Google Apps Script (синтаксис похож на JavaScript).