Фильтрация дат в Excel: от базовых методов до продвинутых приёмов

Почему фильтрация дат в Excel — это не просто сортировка

Работа с датами в Microsoft Excel часто превращается в головоломку: то формат сбивается, то фильтр игнорирует диапазоны, то вместо января 2023 года программа упорно показывает "45002". Причина в том, что Excel хранит даты как числа (количество дней с 1 января 1900 года), а отображает их в привычном нам формате. Эта двойственность приводит к типичным ошибкам: например, при попытке отфильтровать записи за "первый квартал" пользователи получают пустой результат, потому что программа воспринимает условие как текст, а не как временной интервал.

В этой статье мы разберём 7 рабочих методов фильтрации дат — от элементарного автофильтра до сложных формул и Power Query. Вы узнаете, как:

  • 📅 Отсеять записи за конкретный месяц или год без ручного перебора
  • 🔍 Найти все даты, попадающие в динамический диапазон (например, "последние 30 дней")
  • 📊 Фильтровать по неделям, кварталам или рабочим дням
  • ⚡ Автоматизировать процесс с помощью формул ФИЛЬТР() и ДВССЫЛ()

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

Метод 1: Автофильтр — быстро и без формул

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

  1. Выделите заголовок столбца с датами (например, ячейку A1 с названием "Дата").
  2. Перейдите на вкладку Данные → нажмите Фильтр (или используйте горячие клавиши Ctrl+Shift+L).
  3. Щёлкните по стрелке фильтра в заголовке столбца и выберите Фильтры по дате.

Здесь Excel предлагает готовые варианты:

  • 📅 Завтра/Сегодня/Вчера — для актуальных данных
  • 📆 Этот месяц/Прошлый месяц/Следующий месяц — для периодической отчётности
  • 📊 Первый квартал/Второй квартал — для финансового анализа
  • Последний год/Следующий год — для долгосрочных трендов

Если нужного диапазона нет в списке, выберите Настраиваемый фильтр. Например, чтобы отобразить все записи за 2023 год, установите условия: больше или равно 01.01.2023 и меньше или равно 31.12.2023.

⚠️ Внимание: Автофильтр не работает, если даты хранятся как текст (например, после импорта из CSV). Чтобы исправить это, выделите столбец → ГлавнаяФормат ячеек → выберите формат Дата. Если Excel выдаёт ошибку, используйте функцию =ДАТАЗНАЧ(A1) для преобразования.

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

Когда нужно отфильтровать данные по нескольким критериям (например, даты за март 2026 года И сумма продаж > 10 000), автофильтр бессилен. Здесь поможет расширенный фильтр:

  1. Скопируйте заголовки столбцов (например, "Дата" и "Сумма") в пустую область листа (например, в ячейки E1:F1).
  2. Под заголовками укажите условия:
    • В 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 февраля). Чтобы получить записи за январь ИЛИ февраль, условия нужно разместить в разных строках.
    📊 Какой метод фильтрации дат вы используете чаще?
    Автофильтр
    Расширенный фильтр
    Формулы (ФИЛЬТР, ДВССЫЛ)
    Power Query
    Другой

    Метод 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. Добавьте столбец с формулой из таблицы выше.
    2. Примените автофильтр и выберите значение 1.
    3. Скройте вспомогательный столбец (правый клик → Скрыть).

    Как фильтровать по "последней неделе месяца"?

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

    =ЕСЛИ(И(ДЕНЬ(A2)>ДЕНЬ(ДАТА(ГОД(A2);МЕСЯЦ(A2)+1;0)-7); ДЕНЬ(A2)<=ДЕНЬ(ДАТА(ГОД(A2);МЕСЯЦ(A2)+1;0))); 1; 0)

    Эта формула вернёт 1 для дат, попадающих в последние 7 дней месяца (например, с 24 по 31 января).

    Метод 5: Power Query для обработки больших массивов

    Если у вас тысячи строк данных, а фильтры работают медленно, используйте Power Query (вкладка ДанныеПолучить данные). Этот инструмент позволяет:

    • 🔄 Преобразовывать даты в нужный формат автоматически
    • 📊 Фильтровать по сложным условиям (например, "все вторники в чётных неделях")
    • 🔄 Обновлять данные одним кликом

    Пошаговая инструкция:

    1. Выделите таблицу → ДанныеИз таблицы/диапазонаPower Query).
    2. В открывшемся редакторе щёлкните по стрелке рядом с заголовком столбца с датами.
    3. Выберите Фильтры по датеНастраиваемый фильтр.
    4. Укажите условия (например, даты после 01.01.2026 И даты до 31.12.2026).
    5. Нажмите OKЗакрыть и загрузить.

    Power Query сохраняет все шаги преобразования, поэтому при обновлении исходных данных фильтр применится автоматически — достаточно нажать "Обновить все" на вкладке "Данные".

    ⚠️ Внимание: При импорте данных из внешних источников (CSV, SQL) Power Query может неправильно распознать формат дат. Чтобы исправить это, в редакторе выделите столбец → ПреобразоватьТип данных: Дата.

    Метод 6: Условное форматирование для визуальной фильтрации

    Если нужно не скрывать данные, а просто выделить ячейки с определёнными датами, используйте Условное форматирование:

    1. Выделите диапазон с датами.
    2. Перейдите на вкладку ГлавнаяУсловное форматированиеСоздать правило.
    3. Выберите Использовать формулу для определения форматируемых ячеек.
    4. Введите формулу (примеры ниже) и задайте цвет заливки или шрифта.

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

    • 📅 Даты старше 1 года:
      =A1<СЕГОДНЯ()-365
    • 📆 Праздничные дни (например, 1 января, 8 марта):
      =ИЛИ(ДЕНЬ(A1)=1; МЕСЯЦ(A1)=3)
    • 📊 Даты в выходные:
      =ИЛИ(ДЕНЬНЕД(A1)=7; ДЕНЬНЕД(A1)=1)

    После применения правила все ячейки, соответствующие условию, будут выделены. Чтобы отфильтровать только выделенные строки, добавьте вспомогательный столбец с формулой =ЕСЛИ(УСЛОВИЕ; 1; 0) и отфильтруйте по 1.

    Метод 7: Макросы для автоматизации

    Если фильтрацию нужно выполнять регулярно по одним и тем же критериям, запишите макрос:

    1. Нажмите Alt + F11, чтобы открыть редактор VBA.
    2. Выберите InsertModule.
    3. Вставьте код (пример ниже) и закройте редактор.
    4. Назначьте макрос кнопке: РазработчикВставитьКнопка.

    Пример кода для фильтрации дат за текущий месяц:

    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: Ответы на частые вопросы

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

    Скорее всего, ваши даты хранятся как текст. Проверьте это:

    1. Выделите ячейку с датой.
    2. Посмотрите на строку формул: если вместо даты отображается число (например, 45002), формат корректный. Если виден текст (например, "15.05.2026"), нужно преобразовать его в дату.

    Решение: используйте функцию =ДАТАЗНАЧ() или инструмент Текст по столбцам (ДанныеТекст по столбцам → выберите формат ДМГ).

    Как отфильтровать даты по диапазону, если они в разных форматах (например, "15.05.2026" и "15/05/2026")?

    Excel воспринимает такие даты как разные значения. Решение:

    1. Добавьте вспомогательный столбец с формулой =ДАТАЗНАЧ(ПОДСТАВИТЬ(A2; "."; "/")) (заменяет точки на слэши).
    2. Скопируйте значения вспомогательного столбца и вставьте их поверх оригинальных дат (Специальная вставкаЗначения).
    3. Примените фильтр к отформатированным датам.
    Можно ли фильтровать даты по времени (например, только утренние записи с 9:00 до 12:00)?

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

    • >=15.05.2026 9:00
    • <=15.05.2026 12:00

    Если нужно фильтровать только по времени без учёта даты, добавьте вспомогательный столбец с формулой =ВРЕМЯЧАС(A2) и отфильтруйте по значениям от 9 до 12.

    Как сохранить отфильтрованные данные на новый лист?

    Используйте Расширенный фильтр:

    1. Укажите исходный диапазон и диапазон условий (как в Методе 2).
    2. В окне расширенного фильтра выберите скопировать результат в другое место.
    3. Укажите ячейку на новом листе (например, Лист2!A1).
    4. Нажмите OK.

    Альтернатива: скопируйте отфильтрованные строки вручную (выделите видимые ячейки → ГлавнаяНайти и выделитьВыделить группу ячеекТолько видимые ячейки).

    Почему при фильтрации дат появляется ошибка "#ЗНАЧ!"?

    Ошибка возникает в трёх случаях:

    1. В диапазоне есть пустые ячейки или текст вместо дат.
    2. Формула ссылается на несуществующий диапазон (например, A1:A1000, когда данных только до A50).
    3. Используются несовместимые форматы (например, сравнение даты с текстом).

    Решение: проверьте диапазоны на наличие ошибок и убедитесь, что все ячейки имеют формат Дата.