Сравнение дат в Microsoft Excel — одна из самых востребованных операций при работе с отчётами, графиками и аналитикой. Без этого навыка невозможно автоматизировать расчёт сроков, контролировать дедлайны или фильтровать данные по временным интервалам. Однако даже опытные пользователи сталкиваются с ошибками: формулы возвращают неверные результаты, даты отображаются как числа, а условия срабатывают некорректно.
В этой статье разберём 5 проверенных способов сравнения дат — от элементарных операций до комплексных формул с учетом выходных и праздников. Вы узнаете, как вычислить разницу между датами, проверить попадание в диапазон, отфильтровать данные по временным критериям и избежать типичных ошибок форматирования. Все примеры адаптированы для Excel 2010–2023 и Excel Online.
Особое внимание уделим скрытым ловушкам: почему =A1=B1 может вернуть ЛОЖЬ даже для одинаковых дат, как правильно учитывать временную часть (если она есть) и что делать, когда Excel воспринимает даты как текст. В конце статьи — FAQ с ответами на частые вопросы и чек-лист для самопроверки.
1. Базовые операции: как Excel хранит даты и почему это важно
Прежде чем сравнивать даты, нужно понять, как Excel их обрабатывает. Внутри программы любая дата — это числовое значение, где 1 соответствует 1 января 1900 года (в системах для Windows) или 1904 года (на Mac). Например, 45000 в формате даты отобразится как 11.05.2023.
Этот принцип объясняет, почему можно вычитать даты друг из друга (=B2-A2 вернёт разницу в днях) или использовать их в математических формулах. Но есть нюанс: если ячейка отформатирована как текст, Excel не распознает её как дату, даже если там написано 31.12.2026.
- 📅 Формат ячейки: Проверьте, что ячейки с датами имеют формат
Дата(выделите ячейку →Главная → Формат → Формат ячеек → Дата). - ⚠️ Текст вместо даты: Если дата выровнена по левому краю (а не по правому), это текст. Используйте функцию
=ДАТАЗНАЧ()для преобразования. - ⏰ Время в дате: Даты могут включать временную часть (например,
15.07.2026 14:30). Для сравнения только дат используйте=ЦЕЛОЕ(A1).
⚠️ Внимание: Если при копировании данных из внешних источников (например, 1С или PDF) даты отображаются как45678или31.12.2026 (текст), сначала преобразуйте их в правильный формат с помощью=ДАТАЗНАЧ()илиТекст по столбцам(Данные → Текст по столбцам).
2. Простое сравнение: равны ли даты или одна раньше другой
Для базового сравнения используйте стандартные операторы: =, >, <, >=, <=. Например:
=A1=B1— проверяет, совпадают ли даты.=A1>B1— true, если дата вA1позже, чем вB1.=A1<=ДАТА(2026;12;31)— true, если дата вA1не позднее 31 декабря 2026 года.
Пример с условным форматированием: выделите красным все даты в столбце A, которые раньше сегодняшней:
- Выделите диапазон (например,
A2:A100). - Перейдите в
Главная → Условное форматирование → Создать правило → Использовать формулу.... - Введите формулу:
=A2<СЕГОДНЯ(). - Задайте красный цвет заполнения.
Ловушка: Если даты выглядят одинаково, но формула =A1=B1 возвращает ЛОЖЬ, проверьте:
- 🔍 Есть ли в ячейках скрытые символы (пробелы, переносы строк). Используйте
=СЖПРОБЕЛЫ(A1). - ⏰ Учтена ли временная часть. Даже
00:00:01сделает даты разными. - 📏 Разные форматы отображения (например,
ДД.ММ.ГГГГvsММ/ДД/ГГ).
3. Разница между датами: сколько дней, месяцев или лет прошло
Чтобы вычислить интервал между двумя датами, используйте простую разность или специализированные функции:
| Задача | Формула | Пример результата |
|---|---|---|
| Разница в днях | =B1-A1 |
15 (если между датами 15 дней) |
| Разница в месяцах | =РАЗНДАТ(A1;B1;"m") |
3 (если между датами 3 полных месяца) |
| Разница в годах | =РАЗНДАТ(A1;B1;"y") |
1 (если прошёл 1 полный год) |
| Количество рабочих дней (без выходных) | =ЧИСТРАБДНИ(A1;B1) |
10 (если между датами 10 рабочих дней) |
Функция РАЗНДАТ (англ. DATEDIF) — одна из самых полезных, но скрытых в Excel. Она не отображается в списке функций, но работает во всех версиях. Синтаксис:
=РАЗНДАТ(начальная_дата; конечная_дата; "единица_измерения")
Где "единица_измерения" может быть:
"d"— дни,"m"— полные месяцы,"y"— полные годы,"ym"— месяцы без учёта лет,"md"— дни без учёта месяцев и лет.
Пример: Вычислим стаж сотрудника в годах, месяцах и днях, если дата приёма на работу в A2, а текущая дата — СЕГОДНЯ():
=РАЗНДАТ(A2;СЕГОДНЯ();"y") & " лет, " & РАЗНДАТ(A2;СЕГОДНЯ();"ym") & " мес., " & РАЗНДАТ(A2;СЕГОДНЯ();"md") & " дн."
Результат: 5 лет, 2 мес., 15 дн.
4. Проверка попадания даты в диапазон
Частая задача — определить, попадает ли дата в заданный интервал (например, между началом и концом акции). Для этого используйте комбинацию функций И() и логических операторов:
Формула 1: Проверка попадания в закрытый диапазон (включая границы):
=И(A1>=ДАТА(2026;1;1); A1<=ДАТА(2026;12;31))
Формула 2: Проверка попадания в открытый диапазон (исключая одну из границ):
=И(A1>ДАТА(2026;1;1); A1<ДАТА(2026;12;31))
Практический пример: Выделим зелёным все заказы, оформленные в первом квартале 2026 года:
- Выделите столбец с датами.
- Создайте правило условного форматирования с формулой:
=И(A1>=ДАТА(2026;1;1); A1<=ДАТА(2026;3;31)). - Задайте зелёный цвет заполнения.
Проверьте формат ячеек (должен быть "Дата")|Удалите лишние пробелы функцией СЖПРОБЕЛЫ()|Преобразуйте текстовые даты в числовой формат (ДАТАЗНАЧ())|Учтите временную часть (при необходимости используйте ЦЕЛОЕ())-->
⚠️ Внимание: Если в формуле используетеДАТА(год;месяц;день), помните, что месяцы указываются числом от1(январь) до12(декабрь). Ошибка#ЧИСЛО!часто возникает из-за неверного порядка аргументов (например,ДАТА(2026;31;12)вместоДАТА(2026;12;31)).
5. Сравнение с учётом рабочих дней и праздников
Для бизнес-задач часто нужно учитывать только рабочие дни, исключая выходные и праздники. В Excel для этого есть две функции:
=ЧИСТРАБДНИ(нач_дата; кон_дата)— возвращает количество рабочих дней между датами (исключает субботу и воскресенье).=ЧИСТРАБДНИ.INTL(нач_дата; кон_дата; [выходные]; [праздники])— расширенная версия, где можно указать свои выходные дни и список праздников.
Пример 1: Сколько рабочих дней осталось до конца года (исключая субботу и воскресенье):
=ЧИСТРАБДНИ(СЕГОДНЯ(); ДАТА(2026;12;31))
Пример 2: Сколько рабочих дней между двумя датами, если выходные — пятница и суббота (как в некоторых странах), а также исключаем праздники из диапазона D2:D10:
=ЧИСТРАБДНИ.INTL(A1; B1; 7; D2:D10)
Где 7 — код для выходных "пятница и суббота" (см. таблицу ниже).
| Код выходных | Дни недели |
|---|---|
1 |
Суббота, воскресенье |
2 |
Воскресенье, понедельник |
7 |
Пятница, суббота |
11 |
Только воскресенье |
Как добавить праздники:
- Создайте список праздничных дат в отдельном столбце (например,
D2:D10). - Убедитесь, что ячейки имеют формат
Дата. - Используйте этот диапазон в четвёртом аргументе функции
ЧИСТРАБДНИ.INTL.
Как быстро создать список праздников на год?
Используйте функцию =ДАТА(год;месяц;день) для каждого праздника, например:
=ДАТА(2026;1;1) // Новый год
=ДАТА(2026;1;7) // Рождество
Для динамического списка (например, Пасха) потребуются дополнительные вычисления или Power Query.
6. Типичные ошибки и как их избежать
Даже простые операции с датами могут давать сбои из-за неочевидных нюансов. Рассмотрим топ-5 ошибок и способы их решения:
- Ошибка
#ЗНАЧ!при сравнении
Причина: Одна из ячеек содержит текст вместо даты.
Решение: Используйте=ДАТАЗНАЧ(A1)или преобразуйте данные черезТекст по столбцам. - Неверная разница в днях
Причина: В датах учтено время (например,15.07.2026 23:59vs16.07.2026 00:01даст разницу в 1 день, хотя фактически это 2 минуты).
Решение: Округлите даты до целых чисел:=ЦЕЛОЕ(B1)-ЦЕЛОЕ(A1). - Функция
РАЗНДАТвозвращает#ИМЯ?
Причина: Опечатка в названии функции или неверный разделитель аргументов.
Решение: Проверьте синтаксис:=РАЗНДАТ(A1;B1;"d")(в английской версии —DATEDIF). - Дата отображается как число (например,
45678)
Причина: Ячейка имеет общий формат (ОбщийилиЧисловой).
Решение: Измените формат наДата(Ctrl+1 → Число → Дата). - Условное форматирование не срабатывает
Причина: В формуле использованы относительные ссылки без фиксации строки/столбца.
Решение: Закрепите ссылки знаком$, например:=$A1<СЕГОДНЯ().
7. Продвинутые приёмы: динамические диапазоны и Power Query
Для сложных задач (например, сравнение дат в больших таблицах или с учётом внешних данных) стандартных функций может быть недостаточно. Рассмотрим два продвинутых подхода:
1. Динамические именованные диапазоны
Создайте именованный диапазон, который автоматически обновляется при добавлении новых данных. Например, чтобы всегда получать последние 30 дней:
- Перейдите в
Формулы → Диспетчер имён → Создать. - Задайте имя (например,
Последние_30_дней). - В поле
Диапазонвведите:=СМЕЩ(Лист1!$A$1;МАКС(0;ПОИСКПОЗ(СЕГОДНЯ()-30;Лист1!$A:$A;1)-1);0;30;1)
2. Power Query для сравнения дат из разных источников
Если данные хранятся в нескольких файлах или базах, используйте Power Query (Данные → Получить данные):
- 📊 Объединение таблиц: Слияние данных по датам (аналог
VLOOKUP, но мощнее). - 🔍 Фильтрация: Исключение записей за определённый период.
- 📅 Преобразование форматов: Автоматическое приведение дат к единому виду.
Пример запроса в Power Query (язык M):
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
ФильтрПоДате = Table.SelectRows(Источник, each [Дата] > #date(2026, 1, 1) and [Дата] < #date(2026, 12, 31))
in
ФильтрПоДате
FAQ: Ответы на частые вопросы
Почему формула =A1=B1 возвращает ЛОЖЬ, хотя даты визуально одинаковые?
Причин может быть несколько:
- В одной из ячеек есть временная часть (например,
00:00:01). Используйте=ЦЕЛОЕ(A1)=ЦЕЛОЕ(B1). - Дата хранится как текст. Проверьте формат ячейки и используйте
=ДАТАЗНАЧ(A1)=ДАТАЗНАЧ(B1). - Есть скрытые символы (пробелы, неразрывные пробелы). Примените
=СЖПРОБЕЛЫ(A1)=СЖПРОБЕЛЫ(B1).
Как сравнить даты без учёта года (например, найти все записи за 15 июля любого года)?
Используйте функции ДЕНЬ() и МЕСЯЦ():
=И(ДЕНЬ(A1)=15; МЕСЯЦ(A1)=7)
Для динамического поиска (например, все даты, которые приходятся на текущий день и месяц, но любой год):
=И(ДЕНЬ(A1)=ДЕНЬ(СЕГОДНЯ()); МЕСЯЦ(A1)=МЕСЯЦ(СЕГОДНЯ()))
Можно ли сравнить даты с учётом часового пояса?
Excel не поддерживает часовые пояса напрямую. Решения:
- 🌍 Преобразовать все даты к UTC: добавьте или вычтите разницу в часах (например, для Москвы +3 часа летом).
- ⏰ Использовать Power Query: в редакторе запросов есть функции для работы с временными зонами (например,
DateTimeZone.SwitchZone). - 📊 Дополнительные столбцы: создайте отдельные столбцы с датами в нужном поясе.
Как посчитать количество дней между датами, исключая конкретные даты (например, дни отпуска)?
Создайте список исключаемых дат в отдельном диапазоне (например, E2:E10), затем используйте формулу массива:
=ЧИСТРАБДНИ(A1;B1) - СУММПРОИЗВ(--(E2:E10>=A1); --(E2:E10<=B1))
Для ввода формулы массива в старых версиях Excel нажмите Ctrl+Shift+Enter.
Почему функция СЕГОДНЯ() не обновляется автоматически?
Функция СЕГОДНЯ() пересчитывается при:
- 🔄 Открытии файла,
- 🖱️ Изменении любой ячейки,
- 📊 Обновлении связей (
Данные → Обновить все).
Если дата не обновляется:
- Проверьте настройки вычислений:
Формулы → Параметры вычислений → Автоматически. - Убедитесь, что файл не открыт в режиме
Только для чтения. - Для принудительного пересчёта нажмите
F9.