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

Сравнение дат в Microsoft Excel — одна из самых востребованных операций при работе с временными данными. Без этого навыка невозможно анализировать сроки выполнения задач, контролировать дедлайны, строить временные графики или даже просто сортировать события по хронологии. Однако многие пользователи сталкиваются с ошибками: Excel воспринимает даты как числа, игнорирует форматы или выдаёт неожиданные результаты при сравнении.

В этой статье мы разберём 7 практических методов сравнения дат — от элементарных формул до автоматизированных решений с Power Query. Вы узнаете, как избежать типичных ошибок при работе с временными метками, почему 15.01.2026 не всегда равно 15-01-2026, и как сравнивать даты с учётом времени. Особое внимание уделим скрытым ловушкам: например, почему функция ДАТА() может "обманывать" при вводе некорректных значений.

Материал будет полезен как новичкам, так и опытным аналитикам. Начнём с базовых принципов и постепенно перейдём к продвинутым техникам, которые экономят часы ручной работы.

Почему Excel воспринимает даты как числа (и как это использовать)

Прежде чем сравнивать даты, нужно понять, как Excel их хранит. Внутри программы любая дата — это число, где 1 соответствует 01.01.1900 (в Windows) или 01.01.1904 (в Mac по умолчанию). Например, 15.05.2026 для Excel — это число 45415. Такой подход позволяет выполнять математические операции: вычитать даты, прибавлять дни или сравнивать периоды.

Это знание открывает возможности для сравнения:

  • 📅 Прямое сравнение чисел: 15.05.2026 > 10.05.2026 эквивалентно 45415 > 45410.
  • Вычисление разницы: =B2-A2 вернёт количество дней между датами.
  • 🔍 Поиск по диапазону: можно использовать функции ИНДЕКС/ПОИСКПОЗ для работы с датами как с числовыми значениями.

Однако здесь кроется первая ловушка: если ячейка отформатирована как текст (например, после импорта из CSV), Excel увидит не число, а строку "15.05.2026". Сравнивать такие "даты" бессмысленно — программа будет анализировать символы по алфавиту, а не по календарю.

⚠️ Внимание: Даже если ячейка выглядит как дата, проверьте её формат. Кликните правой кнопкой → Формат ячеек → вкладка Число. Правильный формат: Дата (не Текстовый!).

Чтобы преобразовать текст в дату, используйте:

  • 🔄 Функцию ДАТАЗНАЧ(): =ДАТАЗНАЧ("15.05.2026").
  • Текст по столбцам: Данные → Текст по столбцам → Готово (Excel автоматически распознает даты).

Способ 1: Простое сравнение дат с операторами >, <, =

Самый очевидный метод — использовать операторы сравнения прямо в формулах или условном форматировании. Например, чтобы проверить, прошёл ли дедлайн в ячейке A2:

```excel

=SEГОДНЯ()>A2

```

Формула вернёт ИСТИНА, если текущая дата позже указанной. Аналогично работают другие операторы:

  • 📌 =A2>B2 — дата в A2 позже, чем в B2.
  • 📌 =A2<=SEГОДНЯ() — дата в A2 сегодня или раньше.
  • 📌 =A2=B2 — даты совпадают (включая время, если оно есть!).

Пример применения: отметьте красным все просроченные задачи в списке. Выделите диапазон → Условное форматирование → Создать правило → Использовать формулу → введите =SEГОДНЯ()>A1.

⚠️ Внимание: Функция SEГОДНЯ() не обновляется автоматически при открытии файла, если расчёты поставлены в ручной режим (Формулы → Вычисление → Вручную). Проверьте настройки перед использованием!

Критическая особенность: Excel сравнивает даты с учётом времени, даже если оно не отображается. Например, 15.05.2026 00:00 и 15.05.2026 23:59 для программы — разные значения! Чтобы игнорировать время, используйте =ЦЕЛОЕ(A2)=ЦЕЛОЕ(B2).

📊 Какой оператор сравнения дат вы используете чаще?
=SEГОДНЯ()>A1
=A1
=И(A1<=SEГОДНЯ();A1>=ДАТА(2026;1;1))
Другой вариант

Способ 2: Функции ДАТА(), ДЕНЬ(), МЕСЯЦ(), ГОД() для гибкого сравнения

Когда нужно сравнить не всю дату, а только её часть (например, месяц или год), используйте функции извлечения:

  • 📅 =ГОД(A2)=2026 — проверяет, относится ли дата к 2026 году.
  • 📆 =МЕСЯЦ(A2)=5 — май независимо от года.
  • 🕒 =ДЕНЬ(A2)>15 — число месяца больше 15.

Комбинируйте их для сложных условий. Например, найти все даты второго квартала 2026 года:

```excel

=И(ГОД(A2)=2026; МЕСЯЦ(A2)>=4; МЕСЯЦ(A2)<=6)

```

Для сравнения с текущей датой полезна функция SEГОДНЯ() в паре с извлечением компонентов. Например, проверка, что событие произошло в текущем месяце:

```excel

=И(ГОД(A2)=ГОД(SEГОДНЯ()); МЕСЯЦ(A2)=МЕСЯЦ(SEГОДНЯ()))

```

А вот как найти все пятницы 13-е в списке:

```excel

=И(ДЕНЬ(A2)=13; ДЕНЬНЕД(A2;2)=5)

```

где ДЕНЬНЕД() с параметром 2 возвращает 5 для пятницы.

Формат ячейки — "Дата", а не "Текст"|

Используете ДАТАЗНАЧ() для текстового ввода|

Учитываете временную зону (если данные из разных источников)|

Проверяете результат на крайних значениях (например, 29.02.2026)

-->

Способ 3: Условное форматирование для визуального сравнения

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

  1. Выделение просроченных дат:
    • Выделите диапазон (например, A2:A100).
    • Перейдите в Главная → Условное форматирование → Создать правило → Использовать формулу.
    • Введите =SEГОДНЯ()>A2 и задайте красный фон.
  • Даты в текущем месяце:
    =И(МЕСЯЦ(A2)=МЕСЯЦ(SEГОДНЯ()); ГОД(A2)=ГОД(SEГОДНЯ()))

    Задайте зелёный цвет.

  • Даты старше 30 дней:
    =A2

    Используйте серый цвет для архивных записей.

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

    ```excel

    =A2=SEГОДНЯ()+7

    ```

    Цель Формула для правила Пример форматирования
    Просроченные задачи =SEГОДНЯ()>A2 Красный текст, жёлтый фон
    Даты на этой неделе =И(A2>=SEГОДНЯ(); A2 Зелёная заливка
    Выходные дни =ИЛИ(ДЕНЬНЕД(A2;2)=6; ДЕНЬНЕД(A2;2)=7) Синий шрифт
    Даты с ошибками (текст вместо даты) =ЕОШИБКА(ДАТАЗНАЧ(A2)) Оранжевая рамка

    Профи-фишка: Сочетание условного форматирования с значками (стрелочки, флажки). Например, зелёная стрелка вверх для будущих дат и красная вниз для просроченных. Для этого в правиле выберите Формат → Значки.

    Способ 4: Сравнение дат с учётом времени (ДАТАВРЕМЯ, СЕЙЧАС)

    Если в ваших данных есть не только даты, но и время (например, 15.05.2026 14:30), стандартные методы могут давать сбои. Например, формула =A2=B2 вернёт ЛОЖЬ, даже если даты совпадают, но время отличается на секунду.

    Для точного сравнения используйте:

    • 🕐 СЕЙЧАС() — текущие дата и время (обновляется при пересчёте).
    • 📅 ДАТАВРЕМЯ() — создаёт дату с временем (например, =ДАТАВРЕМЯ(2026;5;15;14;30;0)).
    • ⏱️ ЦЕЛОЕ() — отсекает время, оставляя только дату.

    Примеры формул:

    • 🔹 Сравнить только даты, игнорируя время:
      =ЦЕЛОЕ(A2)=ЦЕЛОЕ(B2)
    • 🔹 Проверить, произошло ли событие сегодня (вне зависимости от времени):
      =ЦЕЛОЕ(A2)=SEГОДНЯ()
    • 🔹 Найти записи старше 24 часов:
      =A2<СЕЙЧАС()-1

    Для работы с временными интервалами полезны функции:

    • 🕒 ЧАС(), МИНУТЫ(), СЕКУНДЫ() — извлекают компоненты времени.
    • РАЗНДАТ() — вычисляет разницу между датами в днях, месяцах или годах (универсальнее простого вычитания).
    ⚠️ Внимание: Функция РАЗНДАТ() не документирована в официальной справке Excel, но работает во всех версиях. Синтаксис: =РАЗНДАТ(нач_дата; кон_дата; "d"), где "d" — дни, "m" — месяцы, "y" — годы.

    Способ 5: Продвинутые формулы (ЕСЛИ, И, ИЛИ, РАЗНДАТ)

    Для сложных условий комбинируйте функции логики с датами. Рассмотрим реальные кейсы:

    1. Проверка попадания даты в диапазон (например, с 1 января по 31 марта 2026):

    ```excel

    =И(A2>=ДАТА(2026;1;1); A2<=ДАТА(2026;3;31))

    ```

    2. Классификация дат по категориям (например, "Просрочено", "Скоро", "В срок"):

    ```excel

    =ЕСЛИ(A2

    ЕСЛИ(A2<=SEГОДНЯ()+7; "Скоро"; "В срок"))

    ```

    3. Поиск ближайшей даты к текущей в списке (формула массива, вводится с Ctrl+Shift+Enter в старых версиях):

    ```excel

    =ИНДЕКС(A2:A100; ПОИСКПОЗ(MIN(ABS(A2:A100-SEГОДНЯ())); ABS(A2:A100-SEГОДНЯ()); 0))

    ```

    4. Подсчёт рабочих дней между датами (исключая выходные):

    ```excel

    =ЧИСТРАБДНИ(A2; B2)

    ```

    где A2 — начальная дата, B2 — конечная.

    Для учёта праздников добавьте третий аргумент — диапазон с датами праздников:

    ```excel

    =ЧИСТРАБДНИ(A2; B2; Праздники!A2:A10)

    ```

    Как работает ЧИСТРАБДНИ с праздниками?

    Функция сначала считает все дни между датами, затем вычитает выходные (субботу и воскресенье по умолчанию) и дополнительно исключает даты из третьего аргумента. Например, если в Праздники!A2:A10 указан 01.01.2026, он не будет засчитан как рабочий день, даже если это понедельник.

    5. Сравнение дат с учётом недели (например, найти все понедельники):

    ```excel

    =ДЕНЬНЕД(A2;2)=1

    ```

    где 2 — тип возвращаемого значения (1=воскресенье, 2=понедельник, ..., 7=суббота).

    Способ 6: Фильтрация и сортировка по датам

    Excel позволяет фильтровать и сортировать данные по датам без формул. Вот как это сделать эффективно:

    1. Фильтр по дате:

    • Выделите заголовок столбца с датами.
    • Нажмите Данные → Фильтр.
    • Кликните на стрелку фильтра → Фильтры по дате.
    • Выберите условие (например, После..., Между..., Первые 10 элементов).

    2. Сортировка по хронологии:

    • Выделите диапазон с заголовками.
    • Перейдите в Данные → Сортировка.
    • Выберите столбец с датами и порядок (от старых к новым или наоборот).

    3. Расширенный фильтр для сложных условий:

    • Создайте таблицу с критериями (например, даты между 01.01.2026 и 31.01.2026).
    • Перейдите в Данные → Расширенный фильтр.
    • Укажите исходный диапазон и диапазон критериев.

    4. Умная таблица (Excel Table):

    • Преобразуйте диапазон в таблицу (Ctrl+T).
    • Используйте стрелочки фильтра в заголовках для быстрого доступа к фильтрам по дате.
    • Добавьте срезы (Вставка → Срез) для интерактивной фильтрации.

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

    • Создайте сводную таблицу (Вставка → Сводная таблица).
    • Перетащите поле с датой в область Строки.
    • Группируйте даты по месяцам, кварталам или годам (клик правой кнопкой на дате → Группировать).

    Способ 7: Автоматизация с Power Query и VBA

    Если вам регулярно приходится сравнивать тысячи дат или обрабатывать данные из внешних источников, ручные методы становятся неэффективными. Здесь помогут Power Query и VBA.

    Power Query (Excel 2016+):

    • 🔄 Импорт данных: Данные → Получить данные → Из файла/базы данных.
    • 📅 Преобразование текста в даты: выделите столбец → Преобразовать → Тип данных: Дата.
    • Добавление вычисляемых столбцов:
      • Кликните Добавить столбец → Настраиваемый столбец.
      • Введите формулу на языке M, например:
        if [Дата] < DateTime.LocalNow() then "Просрочено" else "Активно"
    • 📊 Фильтрация по датам: используйте стрелочки в заголовках столбцов для выбора диапазона.

    VBA для массовой обработки:

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

    ```vba

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

    Dim rng As Range, cell As Range

    Set rng = Selection

    For Each cell In rng

    If IsDate(cell.Value) Then

    If cell.Value < Date Then

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

    End If

    End If

    Next cell

    End Sub

    ```

    Чтобы запустить:

    1. Нажмите Alt+F11 для открытия редактора VBA.
    2. Вставьте код в новый модуль (Insert → Module).
    3. Выделите диапазон с датами и запустите макрос (F5).

    Пример для Power Query: сравнение с внешней датой

    Допустим, у вас есть таблица с датами в Excel и отдельный файл с "эталонными" датами. С помощью Power Query можно:

    1. Загрузить оба источника (Данные → Получить данные).
    2. Объединить таблицы по ключевому столбцу (Главная → Объединить запросы).
    3. Добавить столбец с разницей дат:
      = Date.From([Дата1]) - Date.From([Дата2])
    4. Отфильтровать строки, где разница превышает заданное значение.
    ⚠️ Внимание: При работе с Power Query обращайте внимание на локальные настройки даты. Если данные импортируются из источника с другим регионом (например, MM/DD/YYYY вместо DD.MM.YYYY), используйте Locale в параметрах преобразования, чтобы избежать ошибок распознавания.

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

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

    1. Текст вместо даты:

      Симптом: формулы вроде =A2>B2 возвращают #ЗНАЧ! или некорректные результаты.

      Решение: Преобразуйте текст в дату с помощью ДАТАЗНАЧ() или Текст по столбцам.

    2. Разные форматы дат:

      Симптом: 15.05.2026 и 15/05/2026 воспринимаются как разные значения.

      Решение: Унифицируйте формат через Формат ячеек → Дата или используйте ДАТА() для создания дат в едином стиле.

    3. Время влияет на сравнение:

      Симптом: =A2=B2 возвращает ЛОЖЬ, хотя даты совпадают.

      Решение: Используйте ЦЕЛОЕ() или ОКРВНИЗ() для отсечения времени.

    4. Ошибки при вычитании дат:

      Симптом: =B2-A2 возвращает некорректное количество дней.

      Решение: Проверьте, что обе ячейки имеют формат Дата, а не Текст или Общий.

    5. Проблемы с 29 февраля:

      Симптом: Формулы с ДАТА(год;2;29) дают сбой в невисокосные годы.

      Решение: Используйте ЕДАТА() для добавления месяцев или проверку на високосность:

      =ЕСЛИ(ИЛИ(ГОД(A2)<>2026; МЕСЯЦ(A2)<>2; ДЕНЬ(A2)<>29); "Корректно"; "Проверьте дату")

    Для диагностики ошибок используйте:

    • 🔍 ТИП(): =ТИП(A2) вернёт 1 для чисел (даты) и 2 для текста.
    • 📝 ЕЧИСЛО(): =ЕЧИСЛО(A2) проверит, является ли значение числом (даты — это числа!).

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

    Как сравнить дату в Excel с сегодняшним днём, исключая время?

    Используйте формулу =ЦЕЛОЕ(A2)=SEГОДНЯ(). Функция ЦЕЛОЕ() отсекает дробную часть (время), оставляя только дату. Альтернатива: =ДЕНЬ(A2)=ДЕНЬ(SEГОДНЯ()) и т.д. для дня, месяца, года.

    Почему формула =A2>B2 не работает с моими датами?

    Скорее всего, одна или обе ячейки имеют текстовый формат. Проверьте с помощью =ТИП(A2) (должен вернуть 1). Преобразуйте текст в дату с ДАТАЗНАЧ() или инструментом Текст по столбцам.

    Как найти самую раннюю/позднюю дату в диапазоне?

    Используйте функции:

    • =MIN(A2:A100) — минимальная (самая ранняя) дата.
    • =MAX(A2:A100) — максимальная (самая поздняя) дата.

    Для игнорирования пустых ячеек: =МИНЕСЛИ(A2:A100; "<>") (в Excel 2019+).

    Можно ли сравнивать даты из разных книг Excel?

    Да, но убедитесь, что обе книги открыты. Используйте ссылки на внешние данные:

    =SEГОДНЯ()>'[Книга2.xlsx]Лист1'!$A$2

    Если книги закрыты, ссылки не обновятся. Для динамической работы используйте Power Query для объединения данных.

    Как сравнить дату в Excel с датой из веб-запроса?

    При импорте данных из веба (например, через Данные → Из интернета) даты могут импортироваться как текст в формате ISO 8601 (например, "2026-05-15T14:30:00Z"). Преобразуйте их с помощью:

    =ДАТАЗНАЧ(ЛЕВСИМВ(A2;10)) + ВРЕМЗНАЧ(ПСТР(A2;12;8))

    где A2 — ячейка с исходной строкой.