Почему фильтрация дат в Excel — это не просто сортировка
Работа с датами в Microsoft Excel часто превращается в головоломку: то формат сбивается, то фильтр игнорирует диапазоны, то вместо января 2023 года программа упорно показывает "45002". Причина в том, что Excel хранит даты как числа (количество дней с 1 января 1900 года), а отображает их в привычном нам формате. Эта двойственность приводит к типичным ошибкам: например, при попытке отфильтровать записи за "первый квартал" пользователи получают пустой результат, потому что программа воспринимает условие как текст, а не как временной интервал.
В этой статье мы разберём 7 рабочих методов фильтрации дат — от элементарного автофильтра до сложных формул и Power Query. Вы узнаете, как:
- 📅 Отсеять записи за конкретный месяц или год без ручного перебора
- 🔍 Найти все даты, попадающие в динамический диапазон (например, "последние 30 дней")
- 📊 Фильтровать по неделям, кварталам или рабочим дням
- ⚡ Автоматизировать процесс с помощью формул
ФИЛЬТР()иДВССЫЛ()
Особое внимание уделим распространённым ловушкам: почему фильтр не работает с датами в текстовом формате, как исправить ошибку "#ЗНАЧ!" при использовании функций, и почему иногда Excel "не видит" ячейки с датами, отформатированными вручную.
Метод 1: Автофильтр — быстро и без формул
Самый простой способ отфильтровать даты — использовать встроенный автофильтр. Он подходит для одноразовых задач, когда не нужно сохранять условия или автоматизировать процесс. Вот как это работает:
- Выделите заголовок столбца с датами (например, ячейку
A1с названием "Дата"). - Перейдите на вкладку
Данные→ нажмитеФильтр(или используйте горячие клавишиCtrl+Shift+L). - Щёлкните по стрелке фильтра в заголовке столбца и выберите
Фильтры по дате.
Здесь Excel предлагает готовые варианты:
- 📅
Завтра/Сегодня/Вчера— для актуальных данных - 📆
Этот месяц/Прошлый месяц/Следующий месяц— для периодической отчётности - 📊
Первый квартал/Второй квартал— для финансового анализа - ⏳
Последний год/Следующий год— для долгосрочных трендов
Если нужного диапазона нет в списке, выберите Настраиваемый фильтр. Например, чтобы отобразить все записи за 2023 год, установите условия:
больше или равно 01.01.2023 и меньше или равно 31.12.2023.
⚠️ Внимание: Автофильтр не работает, если даты хранятся как текст (например, после импорта из CSV). Чтобы исправить это, выделите столбец →Главная→Формат ячеек→ выберите форматДата. Если Excel выдаёт ошибку, используйте функцию=ДАТАЗНАЧ(A1)для преобразования.
Метод 2: Расширенный фильтр для сложных условий
Когда нужно отфильтровать данные по нескольким критериям (например, даты за март 2026 года И сумма продаж > 10 000), автофильтр бессилен. Здесь поможет расширенный фильтр:
- Скопируйте заголовки столбцов (например, "Дата" и "Сумма") в пустую область листа (например, в ячейки
E1:F1). - Под заголовками укажите условия:
- В
E2:>=01.03.2026 - В
E3:<=31.03.2026 - В
F2:>10000
- В
Данные → Расширенный фильтр.Исходный диапазон укажите таблицу с данными (например, $A$1:$D$100).Диапазон условий выделите ячейки с критериями ($E$1:$F$3).OK.Результат будет выведен на новом листе или в указанной области. Главное преимущество этого метода — возможность комбинировать условия по разным столбцам (например, фильтровать даты И суммы И регионы).
| Тип условия | Пример записи | Результат |
|---|---|---|
| Диапазон дат | >=01.01.2026<=31.01.2026 |
Все записи за январь 2026 |
| Конкретная дата | =15.05.2026 |
Записи только за 15 мая |
| Динамический диапазон | >=СЕГОДНЯ()-30 |
Данные за последние 30 дней |
| Квартал | >=01.04.2026<=30.06.2026 |
Второй квартал 2026 года |
⚠️ Внимание: Если в диапазоне условий указать=01.01.2026и=01.02.2026в одной строке, Excel воспримет это как условие "И" (т.е. искать записи, где дата одновременно равна 1 января И 1 февраля). Чтобы получить записи за январь ИЛИ февраль, условия нужно разместить в разных строках.
Метод 3: Формулы для динамической фильтрации
Если данные обновляются часто, а условия фильтрации меняются (например, нужно всегда показывать последние 7 дней), статические фильтры не подходят. Здесь помогут формулы:
1. Функция ФИЛЬТР() (Excel 365 и 2021)
Синтаксис:
=ФИЛЬТР(диапазон_данных; (условие1) * (условие2); "Нет данных")
Примеры:
- 📅 Последние 30 дней:
=ФИЛЬТР(A2:D100; (A2:A100>=СЕГОДНЯ()-30) * (A2:A100<=СЕГОДНЯ()); "Нет записей") - 📆 Текущий месяц:
=ФИЛЬТР(A2:D100; МЕСЯЦ(A2:A100)=МЕСЯЦ(СЕГОДНЯ()); "Пусто") - 📊 Первый квартал любого года:
=ФИЛЬТР(A2:D100; МЕСЯЦ(A2:A100)<=3; "Нет данных")
2. Функция ДВССЫЛ() для динамических диапазонов
Если нужно фильтровать данные на основе выбранной пользователем даты (например, из выпадающего списка), используйте:
=ФИЛЬТР(A2:D100; A2:A100=ДВССЫЛ("Лист1!F1"); "Выберите дату")
Где F1 — ячейка с выбранной датой (например, через Проверка данных → Список).
⚠️ Внимание: ФормулыФИЛЬТР()иДВССЫЛ()работают только в Excel 365 и 2021. Для старых версий используйте комбинациюИНДЕКС()+ПОИСКПОЗ()или макросы.
Убедиться, что даты в формате "Дата" (не текст)
Проверить отсутствие пустых ячеек в диапазоне
Создать резервную копию данных перед применением формул
Указать сообщение об отсутствии данных (например, "Нет записей")-->
Метод 4: Фильтрация по неделям, кварталам и рабочим дням
Часто требуется фильтровать даты не по календарным месяцам, а по рабочим неделям, кварталам или выходным дням. Для этого используйте вспомогательные столбцы с формулами:
| Задача | Формула | Пример результата |
|---|---|---|
| Номер недели | =НОМНЕДЕЛИ(A2) |
Для 15.05.2026 → 20 |
| Квартал | =ОКРВВЕРХ(МЕСЯЦ(A2)/3; 0) |
Для марта → 1, для июня → 2 |
| Рабочий день (1) / выходной (0) | =ЕСЛИ(ИЛИ(ДЕНЬНЕД(A2)=7; ДЕНЬНЕД(A2)=1); 0; 1) |
Для субботы → 0, для понедельника → 1 |
| Последний день месяца | =ЕСЛИ(ДЕНЬ(A2+1)=1; 1; 0) |
Для 31.01.2026 → 1 |
После добавления вспомогательного столбца примените автофильтр или расширенный фильтр к новому столбцу. Например, чтобы отобразить все записи за 2-й квартал, отфильтруйте вспомогательный столбец по значению 2.
Для фильтрации по рабочим дням:
- Добавьте столбец с формулой из таблицы выше.
- Примените автофильтр и выберите значение
1. - Скройте вспомогательный столбец (правый клик →
Скрыть).
Как фильтровать по "последней неделе месяца"?
Используйте комбинацию функций:
=ЕСЛИ(И(ДЕНЬ(A2)>ДЕНЬ(ДАТА(ГОД(A2);МЕСЯЦ(A2)+1;0)-7); ДЕНЬ(A2)<=ДЕНЬ(ДАТА(ГОД(A2);МЕСЯЦ(A2)+1;0))); 1; 0)
Эта формула вернёт 1 для дат, попадающих в последние 7 дней месяца (например, с 24 по 31 января).
Метод 5: Power Query для обработки больших массивов
Если у вас тысячи строк данных, а фильтры работают медленно, используйте Power Query (вкладка Данные → Получить данные). Этот инструмент позволяет:
- 🔄 Преобразовывать даты в нужный формат автоматически
- 📊 Фильтровать по сложным условиям (например, "все вторники в чётных неделях")
- 🔄 Обновлять данные одним кликом
Пошаговая инструкция:
- Выделите таблицу →
Данные→Из таблицы/диапазона(в Power Query). - В открывшемся редакторе щёлкните по стрелке рядом с заголовком столбца с датами.
- Выберите
Фильтры по дате→Настраиваемый фильтр. - Укажите условия (например,
даты после 01.01.2026Идаты до 31.12.2026). - Нажмите
OK→Закрыть и загрузить.
Power Query сохраняет все шаги преобразования, поэтому при обновлении исходных данных фильтр применится автоматически — достаточно нажать "Обновить все" на вкладке "Данные".
⚠️ Внимание: При импорте данных из внешних источников (CSV, SQL) Power Query может неправильно распознать формат дат. Чтобы исправить это, в редакторе выделите столбец →Преобразовать→Тип данных: Дата.
Метод 6: Условное форматирование для визуальной фильтрации
Если нужно не скрывать данные, а просто выделить ячейки с определёнными датами, используйте Условное форматирование:
- Выделите диапазон с датами.
- Перейдите на вкладку
Главная→Условное форматирование→Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу (примеры ниже) и задайте цвет заливки или шрифта.
Примеры формул:
- 📅 Даты старше 1 года:
=A1<СЕГОДНЯ()-365 - 📆 Праздничные дни (например, 1 января, 8 марта):
=ИЛИ(ДЕНЬ(A1)=1; МЕСЯЦ(A1)=3) - 📊 Даты в выходные:
=ИЛИ(ДЕНЬНЕД(A1)=7; ДЕНЬНЕД(A1)=1)
После применения правила все ячейки, соответствующие условию, будут выделены. Чтобы отфильтровать только выделенные строки, добавьте вспомогательный столбец с формулой =ЕСЛИ(УСЛОВИЕ; 1; 0) и отфильтруйте по 1.
Метод 7: Макросы для автоматизации
Если фильтрацию нужно выполнять регулярно по одним и тем же критериям, запишите макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Выберите
Insert→Module. - Вставьте код (пример ниже) и закройте редактор.
- Назначьте макрос кнопке:
Разработчик→Вставить→Кнопка.
Пример кода для фильтрации дат за текущий месяц:
Sub FilterCurrentMonth()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim dateRange As Range
Set dateRange = ws.Range("A1:A100") ' Диапазон с датами
' Очищаем предыдущие фильтры
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' Применяем фильтр
dateRange.AutoFilter Field:=1, Criteria1:=">=1-" & Month(Date) & "-" & Year(Date), _
Operator:=xlAnd, Criteria2:="<=" & Day(DateSerial(Year(Date), Month(Date) + 1, 0)) & "-" & Month(Date) & "-" & Year(Date)
End Sub
Чтобы фильтровать по другому критерию (например, за прошлый год), измените строки с Criteria1 и Criteria2:
Criteria1:=">=1-1-" & Year(Date) - 1, Criteria2:="<=31-12-" & Year(Date) - 1
⚠️ Внимание: Перед запуском макроса сохраните файл в формате.xlsm(с поддержкой макросов), иначе код не выполнится. Также проверьте, включена ли поддержка макросов в настройках Excel:Файл→Параметры→Центр управления безопасностью→Параметры центра управления безопасностью→Включить все макросы(не рекомендуется для файлов из ненадёжных источников).
FAQ: Ответы на частые вопросы
Почему фильтр не работает с моими датами?
Скорее всего, ваши даты хранятся как текст. Проверьте это:
- Выделите ячейку с датой.
- Посмотрите на строку формул: если вместо даты отображается число (например, 45002), формат корректный. Если виден текст (например, "15.05.2026"), нужно преобразовать его в дату.
Решение: используйте функцию =ДАТАЗНАЧ() или инструмент Текст по столбцам (Данные → Текст по столбцам → выберите формат ДМГ).
Как отфильтровать даты по диапазону, если они в разных форматах (например, "15.05.2026" и "15/05/2026")?
Excel воспринимает такие даты как разные значения. Решение:
- Добавьте вспомогательный столбец с формулой
=ДАТАЗНАЧ(ПОДСТАВИТЬ(A2; "."; "/"))(заменяет точки на слэши). - Скопируйте значения вспомогательного столбца и вставьте их поверх оригинальных дат (
Специальная вставка→Значения). - Примените фильтр к отформатированным датам.
Можно ли фильтровать даты по времени (например, только утренние записи с 9:00 до 12:00)?
Да, если в ячейках хранятся дата и время. Используйте расширенный фильтр с условиями:
>=15.05.2026 9:00<=15.05.2026 12:00
Если нужно фильтровать только по времени без учёта даты, добавьте вспомогательный столбец с формулой =ВРЕМЯЧАС(A2) и отфильтруйте по значениям от 9 до 12.
Как сохранить отфильтрованные данные на новый лист?
Используйте Расширенный фильтр:
- Укажите исходный диапазон и диапазон условий (как в Методе 2).
- В окне расширенного фильтра выберите
скопировать результат в другое место. - Укажите ячейку на новом листе (например,
Лист2!A1). - Нажмите
OK.
Альтернатива: скопируйте отфильтрованные строки вручную (выделите видимые ячейки → Главная → Найти и выделить → Выделить группу ячеек → Только видимые ячейки).
Почему при фильтрации дат появляется ошибка "#ЗНАЧ!"?
Ошибка возникает в трёх случаях:
- В диапазоне есть пустые ячейки или текст вместо дат.
- Формула ссылается на несуществующий диапазон (например,
A1:A1000, когда данных только доA50). - Используются несовместимые форматы (например, сравнение даты с текстом).
Решение: проверьте диапазоны на наличие ошибок и убедитесь, что все ячейки имеют формат Дата.