Как выделить просроченные даты в Excel: от простого к сложному

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

Проблема в том, что большинство пользователей ограничиваются примитивным выделением "красным цветом", не используя гибкие настройки. Например, мало кто знает, что в Excel можно настроить градиентное выделение (чем ближе дата к просрочке — тем интенсивнее цвет) или учитывать только рабочие дни, игнорируя выходные. Мы разберём все эти нюансы на реальных примерах, включая обработку пустых ячеек и ошибки в данных.

Особое внимание уделим динамическим диапазонам: как автоматически выделять просроченные даты в таблице, которая ежедневно пополняется новыми строками. Это избавит от необходимости каждый раз перенастраивать правила вручную. А для продвинутых пользователей приведём пример VBA-макроса, который отправляет уведомления о просрочках по email.

Все методы протестированы на Excel 2010–2023 и Office 365, с учётом особенностей каждой версии. Если вы работаете с Google Таблицами, в конце статьи найдёте отдельный раздел с адаптацией инструкций.

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

Начнём с самого простого способа, который подойдёт даже новичкам. Предположим, у вас есть столбец с датами (например, B2:B100), и нужно выделить все ячейки, где дата раньше сегодняшней.

Алгоритм действий:

  1. Выделите диапазон с датами (например, B2:B100).
  2. Перейдите на вкладку Главная → Условное форматирование → Правила выделения ячеек → Меньше....
  3. В поле введите формулу =СЕГОДНЯ() и выберите цвет заполнения (обычно красный).

Важный нюанс: если в вашем столбце есть пустые ячейки или текст (например, "Нет данных"), Excel проигнорирует их автоматически. Но если там стоят нули или ошибки #ЗНАЧ!, правило сработает некорректно. Чтобы этого избежать, добавьте в формулу проверку:

=И(B2<>""; B2<СЕГОДНЯ())

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

📊 Как часто вам приходится работать с просроченными датами в Excel?
Ежедневно
Несколько раз в неделю
Редко, по мере необходимости
Никогда не сталкивался

2. Градиентное выделение: чем ближе к просрочке — тем ярче цвет

Статическое выделение красным цветом не всегда информативно. Гораздо удобнее, когда ячейки с датами, которые просрочены на 1 день, едва заметно подсвечены, а те, что просрочены на месяц — ярко-красные. Это называется градиентным условным форматированием.

Как настроить:

  1. Выделите диапазон с датами.
  2. Перейдите в Условное форматирование → Создать правило → Форматировать все ячейки на основе их значений.
  3. В поле "Формат стиля" выберите Двухцветная шкала.
  4. Для минимального значения укажите Тип: Формула и введите =СЕГОДНЯ()-30 (выделяет даты просроченные более чем на 30 дней).
  5. Для максимального значения укажите =СЕГОДНЯ()-1 (даты просроченные на 1 день).
  6. Выберите цвета: например, белый для минимального и красный для максимального.

Результат: даты, которые просрочены на 1 день, будут едва розовыми, а те, что просрочены на месяц — насыщенно красными. Это помогает быстро оценивать критичность просрочек.

⚠️ Внимание: Градиентное форматирование не работает с пустыми ячейками. Если в вашем диапазоне есть пропуски, предварительно заполните их нейтральным значением (например, 30.12.9999) или используйте формулу с проверкой =ЕСЛИ(B2="";""; ваша_формула).

Для более точной настройки можно создать три цветовые зоны:

  • 🟢 Зелёный: даты в будущем (ещё не наступили).
  • 🟡 Жёлтый: даты, которые наступят в течение 7 дней.
  • 🔴 Красный: просроченные даты.

Для этого используйте Трёхцветная шкала с формулами:

=СЕГОДНЯ()+7
(верхняя граница жёлтого),
=СЕГОДНЯ()
(граница между жёлтым и зелёным).

3. Учёт рабочих дней: игнорируем выходные и праздники

Если вы работаете с дедлайнами проектов или сроками поставок, важно учитывать только рабочие дни. Например, если задача должна была быть сдана в пятницу, а сегодня понедельник, то фактическая просрочка составляет 1 рабочий день, а не 3 календарных.

Для этого используйте функцию РАБДЕНЬ() в правиле условного форматирования:

  1. Выделите диапазон с датами.
  2. Создайте новое правило: Условное форматирование → Создать правило → Использовать формулу....
  3. Введите формулу:
    =И(B2<>""; B2<РАБДЕНЬ(СЕГОДНЯ(); -1))

    Здесь РАБДЕНЬ(СЕГОДНЯ(); -1) возвращает предыдущий рабочий день (т.е. вчера, если сегодня не выходной).

  4. Задайте формат (например, красный текст на сером фоне).

Если в вашей стране есть праздничные дни, которые не совпадают с выходными (например, 1 мая), укажите их в третьем аргументе функции РАБДЕНЬ:

=РАБДЕНЬ(СЕГОДНЯ(); -1; Праздники!A2:A10)

где Праздники!A2:A10 — диапазон с датами праздников.

Пример таблицы с учётом рабочих дней:

ЗадачаДедлайнСтатус
Отчёт по продажам15.05.2026Просрочено на 2 р.д.
Заключить договор17.05.2026Просрочено на 1 р.д.
Провести встречу20.05.2026В срок
⚠️ Внимание: Функция РАБДЕНЬ считает субботу и воскресенье выходными по умолчанию. Если у вас другой график (например, выходной — пятница), используйте функцию РАБДЕНЬ.МЕЖД с указанием выходных дней:
=РАБДЕНЬ.МЕЖД(СЕГОДНЯ(); -1; 1; Праздники!A2:A10)

где 1 — это код выходного дня (1=суббота, 2=воскресенье, 3=пятница и т.д.).

Указали все праздничные дни в отдельном листе|Проверили формат дат в ячейках (не текст!)|Учели региональные особенности выходных|Тестировали формулу на примере просроченной даты-->

4. Динамические диапазоны: автоматическое выделение в расширяющихся таблицах

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

Шаги для создания:

  1. Перейдите на вкладку Формулы → Диспетчер имён → Создать.
  2. В поле "Имя" введите, например, ДатаДедлайнов.
  3. В поле "Диапазон" введите формулу:
    =СМЕЩ(Лист1!$B$2;0;0;СЧЁТЗ(Лист1!$B:$B)-1;1)

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

  4. Теперь создайте правило условного форматирования, но в поле "Применить к" укажите =ДатаДедлайнов вместо статического диапазона.

Критичный нюанс: если в вашем столбце есть пустые ячейки между заполненными данными, формула СЧЁТЗ даст неверный результат. В этом случае используйте альтернативу:

=СМЕЩ(Лист1!$B$2;0;0;НАИБОЛЬШИЙ((Лист1!$B:$B<>"")*СТРОКА(Лист1!$B:$B);1);1)

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

Преимущества динамических диапазонов:

  • 🔄 Автоматически адаптируются к новым данным.
  • 📊 Упрощают управление большими таблицами (не нужно вручную расширять диапазоны).
  • 🔗 Можно использовать в других формулах (например, для подсчёта просроченных задач).

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

=СЧЁТЕСЛИ(ДатаДедлайнов; "<"&СЕГОДНЯ())

5. Продвинутый уровень: VBA-макрос для выделения и уведомлений

Если вам нужно не только выделять просроченные даты, но и автоматически отправлять уведомления (например, на email или в Microsoft Teams), придётся использовать VBA. Ниже приведён макрос, который:

  1. Выделяет просроченные даты красным.
  2. Создаёт отдельный лист с перечнем просроченных задач.
  3. Отправляет уведомление по email (требуется настройка Outlook).

Код макроса:

Sub ВыделитьПросроченныеДаты()

Dim ws As Worksheet

Dim rng As Range, cell As Range

Dim lastRow As Long

Dim outlookApp As Object, outlookMail As Object

Dim просроченные As String

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

Set ws = ThisWorkbook.Sheets("Лист1")

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

Set rng = ws.Range("B2:B" & lastRow)

' Очищаем предыдущее форматирование

rng.FormatConditions.Delete

' Добавляем правило для просроченных дат

rng.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=СЕГОДНЯ()"

rng.FormatConditions(1).Interior.Color = RGB(255, 100, 100) ' Красный

' Собираем список просроченных задач

просроченные = "Список просроченных задач на " & Format(Date, "dd.mm.yyyy") & vbCrLf & vbCrLf

For Each cell In rng

If cell.Value < Date And cell.Value <> "" Then

просроченные = просроченные & "Задача: " & cell.Offset(0, -1).Value & _

", Дедлайн: " & Format(cell.Value, "dd.mm.yyyy") & vbCrLf

End If

Next cell

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

On Error Resume Next

Application.DisplayAlerts = False

ThisWorkbook.Sheets("Просрочено").Delete

Application.DisplayAlerts = True

On Error GoTo 0

ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = "Просрочено"

ThisWorkbook.Sheets("Просрочено").Range("A1").Value = просроченные

' Отправляем уведомление по email (требуется Outlook)

Set outlookApp = CreateObject("Outlook.Application")

Set outlookMail = outlookApp.CreateItem(0)

With outlookMail

.To = "your.email@example.com" ' Замените на ваш email

.Subject = "Уведомление: просроченные задачи в Excel"

.Body = просроченные

'.Send ' Раскомментируйте для автоматической отправки

.Display ' Показывает письмо для ручной отправки

End With

Set outlookMail = Nothing

Set outlookApp = Nothing

End Sub

Как использовать макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (вставка → модуль).
  3. Настройте имя листа (Лист1) и столбец с датами (B) под вашу таблицу.
  4. Запустите макрос через Alt + F8 или назначьте его на кнопку.
⚠️ Внимание: Макрос отправляет email через Microsoft Outlook. Если у вас другая почтовая программа, замените код отправки на API вашего сервиса (например, Gmail API). Также проверьте настройки безопасности Excel: макросы должны быть разрешены (Файл → Параметры → Центр управления безопасностью → Параметры центра...).
Как отладить макрос, если он не работает?

1. Убедитесь, что в настройках Excel разрешены макросы (вкладка "Разработчик" должна быть видна).

2. Проверьте, что столбец с датами указан верно (в коде это `Range("B2:B" & lastRow)`).

3. Если Outlook не установлен, закомментируйте строки с `Set outlookApp` до `Set outlookApp = Nothing`.

4. Для тестирования замените `.Send` на `.Display` — так письмо откроется для ручной отправки, и вы сможете проверить его содержимое.

6. Альтернативные методы: фильтры, сводные таблицы и Power Query

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

Метод 1: Автофильтр

  • Выделите заголовок столбца с датами.
  • Нажмите Данные → Фильтр.
  • Раскройте выпадающий список в заголовке столбца и выберите Фильтры по дате → До → Сегодня.

Это быстро покажет все просроченные записи, но не выделит их визуально.

Метод 2: Сводная таблица

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

  1. Создайте сводную таблицу (Вставка → Сводная таблица).
  2. Перетащите поле с категориями в область "Строки", а поле с датами — в область "Значения".
  3. Нажмите на стрелочку рядом с "Сумма по полю значений" → Параметры значений → Доля от... и выберите Доля от общей суммы %.
  4. Добавьте фильтр по дате: Фильтры → Фильтр по дате → До → Сегодня.

Метод 3: Power Query

Для обработки больших объёмов данных (например, импорт из или SQL):

  1. Перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте пользовательский столбец с формулой:
    = if [Дедлайн] < DateTime.LocalNow() then "Просрочено" else "В срок"
  3. Загрузите данные обратно в Excel.

Сравнение методов:

МетодПлюсыМинусыКогда использовать
Условное форматированиеВизуально наглядно, обновляется автоматическиНе подходит для анализа данныхЕжедневный мониторинг просрочек
АвтофильтрБыстро, не требует настройкиНе сохраняет фильтр при закрытии файлаРазовые проверки
Сводная таблицаГруппировка по категориям, аналитикаТребует обновления при изменении данныхОтчёты для руководства
Power QueryОбработка больших данных, трансформацияСложно для новичковИмпорт и очистка внешних данных
VBA-макросАвтоматизация, уведомления, сложная логикаТребует знаний программированияРегулярные задачи с уведомлениями

7. Особенности работы в Google Таблицах

Если вы используете Google Таблицы, большинство методов из этой статьи применимы и там, но есть нюансы:

  • 🔹 Функция СЕГОДНЯ() называется =TODAY().
  • 🔹 Для рабочих дней используйте =WORKDAY(TODAY(); -1).
  • 🔹 Условное форматирование настраивается через меню Формат → Условное форматирование.
  • 🔹 В Google Таблицах нет Power Query, но есть Импортдиапазон и Apps Script для автоматизации.

Пример правила для Google Таблиц:

  1. Выделите диапазон с датами.
  2. Выберите Формат → Условное форматирование.
  3. В поле "Форматировать ячейки, если..." выберите Настраиваемая формула и введите:
    =AND(B2<>""; B2
  4. Выберите стиль форматирования и нажмите Готово.

Бонус для Google Таблиц: вы можете настроить уведомления по email при изменении данных. Для этого:

  1. Откройте Инструменты → Правила уведомлений.
  2. Выберите Уведомлять о любых изменениях или настройте условие (например, при добавлении строки с просроченной датой).

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

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

Ошибка 1: Даты хранятся как текст

Если вы импортировали данные из внешнего источника (например, или CSV), даты могут восприниматься как текст. Признаки:

  • 📅 Даты выровнены по левому краю (а должны — по правому).
  • 🔢 Формулы вроде =B2<СЕГОДНЯ() возвращают #ЗНАЧ!.

Решение: выделите столбец с датами и выполните Данные → Текст по столбцам → Готово. Или используйте формулу:

=ДАТАЗНАЧ(B2)

Ошибка 2: Неверный регион (формат даты)

Если ваш Excel настроен на американский формат (MM/DD/YYYY), а вы вводите даты в российском формате (DD.MM.YYYY), возникнет путаница. Например, 01.05.2026 будет воспринято как 1 мая в российском формате и как 5 января — в американском.

Решение: проверьте региональные настройки в Файл → Параметры → Язык → Региональные параметры.

Ошибка 3: Условное форматирование не применяется к новым строкам

Если вы добавили правило к диапазону B2:B100, а затем вставили строку 101, она не будет проверяться. Решение — использовать динамические диапазоны (см. раздел 4) или таблицы Excel (Ctrl + T), которые автоматически расширяются.

Ошибка 4: Формулы не обновляются

Если в ячейке стоит формула вроде =СЕГОДНЯ()-30, но она не меняется при открытии файла, проверьте:

  • 🔄 В настройках Excel (Файл → Параметры → Формулы) должен стоять режим Автоматически.
  • 📥 Если файл открыт в Google Таблицах или Excel Online, некоторые функции (например, СЕГОДНЯ()) обновляются только при ручном пересчёте (F9).

Ошибка 5: Макрос не работает в новых версиях Excel

Код VBA, написанный для Excel 2010, может не работать в Excel 365 из-за изменений в объектах. Например, вместо CreateObject("Outlook.Application") может потребоваться раннее связывание:

Dim outlookApp As Outlook.Application

Set outlookApp = New Outlook.Application

Решение: обновите ссылки в редакторе VBA (Инструменты → Ссылки) и проверьте совместимость кода с вашей версией.

FAQ: Частые вопросы по работе с просроченными датами

Как выделить даты, которые просрочены ровно на 7 дней?

Используйте правило условного форматирования с формулой:

=И(B2<>""; B2=СЕГОДНЯ()-7)

Если нужно выделить диапазон "от 5 до 10 дней просрочки", используйте:

=И(B2<>""; B2<=СЕГОДНЯ()-5; B2>=СЕГОДНЯ()-10)
Можно ли выделить просроченные даты в сводной таблице?

Да, но не через условное форматирование. Сначала добавьте в исходные данные столбец с статусом (например, =ЕСЛИ(B2<СЕГОДНЯ();"Просрочено";"В срок")), затем используйте его как поле в сводной таблице. Для визуального выделения настройте Параметры полей значений → Дополнительные вычисления → % от строки и примените условное форматирование к ячейкам сводной таблицы.

Как автоматически отправлять email при появлении просроченных дат?

Для этого нужен VBA-макрос (см. раздел 5) или Power Automate (если работаете с Excel Online). В Google Таблицах можно использовать Apps Script с триггером по времени:

function checkOverdue() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1");

var data = sheet.getDataRange().getValues();

var overdue = [];

for (var i = 1; i < data.length; i++) {

if (data[i][1] instanceof Date && data[i][1] < new Date()) {

overdue.push("Задача: " + data[i][0] + ", Дедлайн: " + data[i][1]);

}

}

if (overdue.length > 0) {

MailApp.sendEmail("your.email@example.com", "Просроченные задачи", overdue.join("\n"));

}

}

Настройте триггер в Редактор скриптов → Триггеры → Добавить триггер (например, ежедневный запуск в 9:00).

Почему условное форматирование не работает с моими датами?

Чаще всего это происходит из-за:

  • 📅 Даты хранятся как текст (проверьте выравнивание ячеек).
  • 🔢 Формат ячеек не "Дата" (кликните правой кнопкой → Формат ячеек → Дата).
  • 🔄 В настройках Excel отключён автоматический пересчёт формул (Формулы → Параметры вычислений → Автоматически).
  • 📊 Правило применено к неправильному диапазону (проверьте в Управление правилами).

Для диагностики добавьте вспомогательный столбец с формулой =ТИП(B2). Если результат не 1 (число), значит, дата хранится как текст.

Как выделить просроченные даты в фильтрованном списке?

Условное форматирование по умолчанию не учитывает фильтры. Чтобы выделять только видимые строки:

    <