Проверка даты в Excel: от простых формул до автоматизации

Почему проверка дат в Excel требует особого подхода

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

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

  • 🔍 Отделить корректные даты от текста или чисел
  • ⏳ Проверить, попадает ли дата в заданный диапазон (например, "не позже 30.06.2026")
  • 📅 Исключить выходные и праздники из расчётов
  • ⚠️ Автоматически выделять просроченные или будущие даты
  • 🤖 Написать макрос для массовой проверки тысяч строк

Важно: Excel хранит даты как числа (количество дней с 1 января 1900 года), поэтому любая проверка должна учитывать этот формат — иначе функция ЕДАТА() вернёт ошибку для текста "31 февраля".

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

Метод 1: Базовая проверка на корректность даты (функция ЕДАТА)

Самый простой способ проверить, является ли значение в ячейке валидной датой — использовать функцию ЕДАТА(). Она возвращает ошибку #ЗНАЧ!, если входное значение не может быть интерпретировано как дата.

Формула для проверки ячейки A1:

=ЕСЛИ(ЕОШИБКА(ЕДАТА(A1;0)); "Неверная дата"; "Дата корректна")

Как это работает:

  • 📌 ЕДАТА(A1;0) пытается прибавить 0 месяцев к значению в A1. Если это невозможно (например, для текста "abc"), возвращается ошибка.
  • 🔄 ЕОШИБКА() проверяет, есть ли ошибка.
  • ЕСЛИ() выводит сообщение о статусе.
⚠️ Внимание: Эта формула не отличит 31.02.2026 от 31.12.2026 — обе будут восприняты как текст. Для глубокой проверки используйте метод 2.
Значение в ячейке Результат формулы Пояснение
15.05.2026 "Дата корректна" Корректный формат даты
31.02.2026 "Неверная дата" Текст, не соответствующий реальной дате
45678 "Дата корректна" Число, которое Excel интерпретирует как дату (12.01.2012)
"Срок истёк" "Неверная дата" Текст без числовых значений

Метод 2: Проверка на существование даты (с учётом месяцев и високосных лет)

Функция ЕДАТА() не улавливает ошибки вроде 31.04.2026 или 29.02.2023 (невисокосный год). Для этого нужна комбинация функций ДЕНЬ(), МЕСЯЦ() и ГОД():

=ЕСЛИ(

И(

ДЕНЬ(A1)=ДЕНЬ(ДАТА(ГОД(A1); МЕСЯЦ(A1); ДЕНЬ(A1)));

МЕСЯЦ(A1)=МЕСЯЦ(ДАТА(ГОД(A1); МЕСЯЦ(A1); ДЕНЬ(A1)));

ГОД(A1)=ГОД(ДАТА(ГОД(A1); МЕСЯЦ(A1); ДЕНЬ(A1)))

);

"Дата существует";

"Некорректная дата"

)

Логика:

  1. Функция ДАТА() пытается создать дату из компонентов года, месяца и дня.
  2. Если день превышает количество дней в месяце (например, 31 апреля), Excel автоматически переносит "лишние" дни на следующий месяц (в случае с 31.04 → 01.05).
  3. Сравнивая исходные и полученные значения, мы выявляем несоответствия.

Пример: для 29.02.2023 (невисокосный год) функция ДАТА(2023; 2; 29) вернёт 01.03.2023, поэтому условие будет ложным.

☑️ Проверка даты на корректность

Выполнено: 0 / 4

Метод 3: Проверка диапазона дат (актуальность, просрочка, будущие даты)

Частая задача — проверить, попадает ли дата в заданный интервал. Например, чтобы выявить просроченные задачи или будущие события. Для этого используйте комбинацию функций ЕСЛИ() и логических операторов.

Пример 1: Проверка на просрочку (даты раньше сегодняшней):

=ЕСЛИ(A1<СЕГОДНЯ(); "Просрочено"; "Актуально")

Пример 2: Проверка на попадание в диапазон (например, с 01.01.2026 по 31.12.2026):

=ЕСЛИ(

И(A1>=ДАТА(2026;1;1); A1<=ДАТА(2026;12;31));

"В диапазоне";

"Вне диапазона"

)

Для визуального контроля добавьте условное форматирование:

  1. Выделите диапазон с датами.
  2. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  3. Выберите "Форматировать только ячейки, которые содержат".
  4. Установите условие: "Значение ячейки" → "меньше" → "=СЕГОДНЯ()" и задайте красный цвет заливки.
⚠️ Внимание: Функция СЕГОДНЯ() пересчитывается при каждом открытии файла. Если вам нужна фиксированная дата отчёта (например, "на 31.03.2026"), замените её на ДАТА(2026;3;31).
Как проверить дату с учётом рабочих дней?

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

=РАБДЕНЬ(СЕГОДНЯ(); A1-СЕГОДНЯ())

Где A1 — ячейка с датой дедлайна. Для учёта праздников добавьте их в третий аргумент функции как диапазон ячеек.

Метод 4: Проверка дат с учётом рабочих дней и праздников

Если вам нужно проверить, является ли дата рабочим днём (исключая субботу, воскресенье и праздники), используйте функцию РАБДЕНЬ.МЕЖД() (в новых версиях Excel) или РАБДЕНЬ().

Шаг 1. Создайте список праздников в отдельном диапазоне (например, D1:D10).

Шаг 2. Примените формулу:

=ЕСЛИ(

ИЛИ(

НЕДЕЛЯ(A1;2)>5; -- Суббота (6) или воскресенье (7)

СЧЁТЕСЛИ($D$1:$D$10;A1)>0 -- Дата есть в списке праздников

);

"Выходной/праздник";

"Рабочий день"

)

Для расчёта количества рабочих дней между двумя датами:

=РАБДЕНЬ.МЕЖД(A1; B1; $D$1:$D$10)

Где:

  • 📅 A1 — начальная дата
  • 📅 B1 — конечная дата
  • 🎉 $D$1:$D$10 — диапазон с праздниками

Пример списка праздников для России (2026 год):

Дата Праздник
01.01.2026 Новый год
07.01.2026 Рождество
23.02.2026 День защитника Отечества
08.03.2026 Международный женский день

Метод 5: Автоматизация проверки с помощью VBA

Если вам нужно проверить тысячи дат или создать пользовательскую логику (например, "выделить все даты, которые выпадают на пятницу 13-е"), используйте VBA-макрос. Ниже пример кода, который:

  • 🔍 Проверяет корректность даты
  • ⏳ Сравнивает с текущей датой
  • 📅 Исключает выходные
  • 🖍️ Закрашивает ячейки в зависимости от статуса

Код макроса:

Sub CheckDates()

Dim cell As Range

Dim lastRow As Long

Dim holidayList As Range

' Установите диапазон с датами (например, столбец A)

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

Set holidayList = Sheets("Лист1").Range("D1:D10") ' Диапазон с праздниками

For Each cell In Range("A1:A" & lastRow)

If IsDate(cell.Value) Then

' Проверка на выходной (суббота/воскресенье)

If Weekday(cell.Value, vbMonday) > 5 Or _

Application.WorksheetFunction.CountIf(holidayList, cell.Value) > 0 Then

cell.Interior.Color = RGB(255, 199, 206) ' Светло-красный

cell.Offset(0, 1).Value = "Выходной"

' Проверка на просрочку

ElseIf cell.Value < Date Then

cell.Interior.Color = RGB(255, 235, 156) ' Жёлтый

cell.Offset(0, 1).Value = "Просрочено"

' Корректная рабочая дата

Else

cell.Interior.Color = RGB(204, 255, 204) ' Светло-зелёный

cell.Offset(0, 1).Value = "OK"

End If

Else

cell.Interior.Color = RGB(255, 204, 204) ' Красный

cell.Offset(0, 1).Value = "Ошибка"

End If

Next cell

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Запустите макрос нажатием F5 или через Макросы на вкладке Разработчик.
⚠️ Внимание: Перед запуском макроса сохраните файл в формате .xlsm (с поддержкой макросов) и убедитесь, что в настройках безопасности разрешено выполнение скриптов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов).

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

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

  1. Текст вместо даты: Если дата импортирована из внешнего источника (например, CSV), Excel может воспринять её как текст. Решение: используйте ДАТАЗНАЧ() или преобразуйте формат через Текст по столбцам.
  2. Неверный региональный формат: В американском формате ММ/ДД/ГГГГ, а в российском — ДД.ММ.ГГГГ. Если файл создан в другой локали, даты могут "перевернуться". Решение: проверьте настройки региональных параметров в Файл → Параметры → Язык.
  3. Ошибки в формулах: Например, =A1>СЕГОДНЯ() вернёт ЛОЖЬ для будущих дат, а не просроченных. Решение: всегда тестируйте формулы на контрольных данных.
  4. Високосные годы: Забывают, что 2026 год — високосный, а 2023 — нет. Решение: используйте функцию ДАТА() для проверки (см. Метод 2).

Чтобы минимизировать ошибки, следуйте чек-листу:

☑️ Проверка перед работой с датами

Выполнено: 0 / 5

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

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

Используйте комбинацию функций ЕПУСТО() и ЕДАТА():

=ЕСЛИ(ИЛИ(ЕПУСТО(A1); ЕОШИБКА(ЕДАТА(A1;0))); "Ошибка"; "OK")
Можно ли проверить дату без формул, только условным форматированием?

Да. Выделите диапазон → Условное форматирование → Создать правило → Использовать формулу и введите:

=ИЛИ(NOT(ISNUMBER(A1)); A1<ДАТА(2026;1;1))

Это выделит все некорректные даты или даты до 01.01.2026.

Как исключить из проверки ячейки с текстом "Н/Д" или "Не указано"?

Добавьте дополнительное условие в формулу:

=ЕСЛИ(

ИЛИ(

A1="Н/Д";

A1="Не указано";

ЕОШИБКА(ЕДАТА(A1;0))

);

"Игнорировать";

"Проверить"

)

Почему функция ДАТА() возвращает неверный месяц?

Скорее всего, вы перепутали порядок аргументов. В русской версии Excel синтаксис: ДАТА(год; месяц; день). Например, ДАТА(2026; 5; 15) — это 15 мая, а не 5-е число 15-го месяца.

Как проверить, что дата попадает на конкретный день недели (например, пятницу)?

Используйте функцию НЕДЕЛЯ():

=ЕСЛИ(НЕДЕЛЯ(A1;2)=5; "Пятница"; "Другой день")

Где 5 — код пятницы (1=понедельник, 7=воскресенье).