Работа с датами в 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 автоматически скроет все актуальные записи.
Для более гибкой фильтрации создайте расширенный фильтр:
- Добавьте над таблицей строку с критерием (например, в ячейке
B1напишите "Просрочено"). - В ячейке под критерием (
B2) введите формулу=A2<СЕГОДНЯ(), гдеA2— первая ячейка с датой. - Перейдите в
Данные→Расширенный фильтр→ укажите диапазон исходных данных и диапазон критериев.
Создать строку с заголовком критерия|Ввести формулу сравнения с СЕГОДНЯ()|Указать диапазон данных без заголовков|Выбрать опцию "Скопировать результат в другое место" (при необходимости)-->
Обратите внимание: расширенный фильтр не обновляется автоматически. При изменении данных в таблице его нужно запускать повторно. Для динамического отображения лучше использовать Таблицы Excel (сочетание клавиш Ctrl+T) с последующей фильтрацией.
Условное форматирование|Фильтры|Формулы|Power Query|Другой способ-->
3. Формулы для расчёта просрочки
Когда требуется не только найти, но и посчитать количество дней просрочки или присвоить статус ("Актуально"/"Просрочено"), без формул не обойтись. Рассмотрим три ключевые функции:
- 📊
=ЕСЛИ(A1<СЕГОДНЯ();"Просрочено";"Актуально")— простая проверка статуса - ⏳
=МАКС(0;СЕГОДНЯ()-A1)— количество дней просрочки (0, если срок не истёк) - ⚠️
=ЕСЛИОШИБКА(СЕГОДНЯ()-A1;"")— игнорирует пустые ячейки
Для расчёта просрочки с учётом рабочих дней (исключая выходные) используйте:
=ЕСЛИ(A1<СЕГОДНЯ();ЧИСТРАБДНИ(A1;СЕГОДНЯ());0)
Если в вашей организации нестандартный график (например, рабочая суббота), укажите его в третьем аргументе функции ЧИСТРАБДНИ как диапазон с праздничными датами.
⚠️ Внимание: Формулы сСЕГОДНЯ()пересчитываются при каждом открытии файла или изменении данных. Это может замедлить работу с большими таблицами (10 000+ строк). В таких случаях заменитеСЕГОДНЯ()на фиксированную дату в отдельной ячейке и обновляйте её вручную.
4. Power Query: автоматизация для больших данных
Когда таблица содержит тысячи строк или данные импортируются из внешних источников (1С, CRM, SQL), ручные методы становятся неэффективными. Здесь поможет Power Query — инструмент для преобразования и очистки данных. Алгоритм действий:
- Выделите исходную таблицу и нажмите
Данные→Из таблицы/диапазона(илиGet Data → From Table/Rangeв английской версии). - В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
= if [Дата окончания] < DateTime.LocalNow() then "Просрочено" else "Актуально" - Добавьте ещё один столбец для расчёта дней просрочки:
= Duration.Days(DateTime.LocalNow() - [Дата окончания]) - Примените фильтр к новому столбцу, оставив только строки со статусом "Просрочено".
- Нажмите
Закрыть и загрузить, чтобы вернуть данные в Excel.
Преимущество Power Query — возможность автоматически обновлять данные при изменении источника. Например, если вы подключили таблицу к базе 1С, достаточно нажать Обновить все на вкладке Данные, и просрочки пересчитаются с учётом актуальных данных.
Как обработать даты в текстовом формате?
Если даты в исходных данных хранятся как текст (например, "31.12.2026"), в Power Query добавьте шаг преобразования:
1. Выделите столбец с датой.
2. Перейдите на вкладку Преобразование → Формат данных → Дата.
3. Если автоматическое распознавание не сработало, используйте функцию = DateTime.FromText([Столбец], "dd.MM.yyyy") в пользовательском столбце.
5. Сводные таблицы для анализа просрочек
Когда нужно не только найти просроченные записи, но и проанализировать их распределение (например, по отделам, контрагентам или типам договоров), создайте сводную таблицу. Алгоритм:
- Выделите исходную таблицу и нажмите
Вставка→Сводная таблица. - В область
Строкиперетащите поле с категорией (например, "Отдел" или "Тип договора"). - В область
Значениядобавьте поле с датой, выбрав операциюКоличество. - Добавьте в таблицу вычисляемое поле для фильтрации просрочек:
=ЕСЛИ(МАКС(Дата_окончания)<СЕГОДНЯ();1;0) - Отфильтруйте сводную таблицу по вычисляемому полю, оставив только строки со значением
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 создайте поток, который:
- Читает файл Excel из OneDrive/SharePoint.
- Фильтрует строки с просроченными датами.
- Отправляет 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).