Почему фильтрация по датам в Excel требует особого подхода
Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе данных. Но если числовые значения и текст фильтруются интуитивно, то даты часто ставят пользователей в тупик. Дело в том, что Excel хранит даты не как текст, а как серийные номера (количество дней с 1 января 1900 года). Это приводит к неожиданным результатам при стандартной фильтрации: например, попытка отобрать записи за "январь 2023" через текстовый фильтр может пропустить половину данных.
Ещё одна ловушка — форматы дат. Если в столбце смешаны форматы (например, "01.01.2023" и "01-янв-23"), Excel воспринимает их как разные типы данных. В результате фильтр может игнорировать часть записей или работать непредсказуемо. Особенно актуально это для таблиц, импортированных из внешних источников (1С, CRM-систем, баз данных).
В этой статье мы разберём 5 надёжных способов фильтрации по датам, которые работают в Excel 2010–2023 и Office 365, включая малоизвестные приёмы для нестандартных задач. Вы узнаете, как отфильтровать данные по диапазону дат, дню недели, кварталу или даже рабочим/выходным дням — без формул и с их использованием.
1. Базовый автофильтр: быстрый способ для стандартных задач
Автофильтр — самый простой инструмент, который подходит для 80% задач. Он позволяет отбирать данные по точным датам, диапазонам или относительным периодам (например, "последняя неделя"). Чтобы его включить:
- Выделите любую ячейку в таблице с данными.
- Перейдите на вкладку
Данные→ нажмитеФильтр(или используйте сочетаниеCtrl+Shift+L). - Нажмите на стрелку фильтра в заголовке столбца с датой.
В открывшемся меню вы увидите несколько вариантов:
- 📅 Фильтры по дате: готовые диапазоны ("Завтра", "На этой неделе", "В прошлом квартале" и т.д.).
- 🔍 Текстовые фильтры: полезны, если даты хранятся как текст (например, после импорта из CSV).
- 📊 Числовые фильтры: позволяют задавать условия типа "больше", "меньше", "между".
- ✅ Выделение отдельных дат: отметьте галочками нужные значения в списке.
Пример: чтобы отобразить продажи за II квартал 2023 года, выберите в фильтрах по дате Между... и укажите диапазон с 01.04.2023 по 30.06.2023. Excel автоматически преобразует введённые даты в правильный формат.
⚠️ Внимание: Если в столбце есть пустые ячейки или текстовые значения (например, "Нет данных"), автофильтр по дате их проигнорирует. Чтобы их увидеть, снимите все фильтры или используйте текстовый фильтр.
Убедитесь, что столбец с датой имеет формат "Дата" (выделите столбец → Главная → Формат → Формат ячеек → Дата)
Проверьте отсутствие скрытых символов (пробелов, неразрывных пробелов) в ячейках
Преобразуйте текстовые даты в настоящие даты с помощью функции =ДАТАЗНАЧ()
Удалите дубликаты, если они мешают анализу (Данные → Удалить дубликаты)
-->
2. Расширенный фильтр: для сложных условий и динамических диапазонов
Когда нужно отфильтровать данные по нескольким критериям одновременно (например, дата и категория товара), или сохранить результаты фильтрации на другом листе, приходит на помощь расширенный фильтр. Его ключевое преимущество — возможность задавать условия в отдельном диапазоне ячеек.
Алгоритм действий:
- Создайте диапазон условий (например, в ячейках
F1:G2):- В
F1введите заголовок столбца с датой (должен совпадать с оригиналом!). - В
F2укажите условие, например>=01.01.2023. - В
G1введите заголовок другого столбца (например, "Категория"), а вG2— значение для фильтра (например, "Электроника").
- В
Данные → Сортировка и фильтр → Дополнительно.- Исходный диапазон: ваша таблица с данными (например,
A1:D1000). - Диапазон условий: созданный вами диапазон (например,
F1:G2). - Отметьте
Скопировать результат в другое место, если нужно сохранить отфильтрованные данные отдельно.
Пример диапазона условий для фильтрации продаж электроники за 2023 год:
| Дата | Категория |
|---|---|
| >=01.01.2023 | Электроника |
| <=31.12.2023 |
Обратите внимание: если в диапазоне условий указать несколько строк для одного столбца (как в примере выше), Excel воспримет их как условие "И" (логическое AND). Для условия "ИЛИ" (OR) нужно разместить критерии в одной строке.
Как фильтровать по дню недели?
Чтобы отобрать, например, все записи по понедельникам, используйте функцию =ДЕНЬНЕД(ячейка;2) в диапазоне условий. Например:
| Дата | День недели |
|---|---|
| =1 |
Где "1" — это понедельник (воскресенье = 7). Не забудьте добавить вспомогательный столбец с формулой =ДЕНЬНЕД(A2;2) в исходную таблицу.
3. Фильтрация с помощью формул: гибкость без ограничений
Если автофильтр и расширенный фильтр не справляются с задачей (например, нужно отфильтровать даты по нестандартному условию вроде "каждая вторая пятница месяца"), на помощь приходят формулы массива. В современных версиях Excel (2019+) для этого есть специальная функция ФИЛЬТР (англ. FILTER).
Пример 1: Фильтрация по диапазону дат (Excel 2019+):
=ФИЛЬТР(
A2:D100; // Диапазон данных для фильтрации
(A2:A100>=ДАТА(2023;1;1))*(A2:A100<=ДАТА(2023;12;31)); // Условие: даты в 2023 году
"Нет данных" // Сообщение, если ничего не найдено
)
Пример 2: Фильтрация по дню недели (любая версия Excel):
=ЕСЛИОШИБКА(
ИНДЕКС($A$2:$D$100; ПОИСКПОЗ(1; (ДЕНЬНЕД($A$2:$A$100;2)=5)*1; 0); 0);
""
)
Эта формула вернёт все строки, где дата приходится на четверг (5). Введите её как формулу массива (в старых версиях Excel нажмите Ctrl+Shift+Enter).
Для удобства можно создать выпадающий список с днями недели и связать его с формулой. Например, если в ячейке F1 пользователь выбирает день недели (1–7), формула примет вид:
=ФИЛЬТР(A2:D100; ДЕНЬНЕД(A2:A100;2)=F1; "Нет данных")
⚠️ Внимание: Формулы массива могут значительно замедлить работу книги, если таблица содержит более 10 000 строк. В таких случаях лучше использовать Power Query (см. раздел 5).
4. Условное форматирование: визуальная фильтрация
Если вам не нужно скрывать данные, а достаточно их выделить (например, пометить просроченные задачи красным), используйте условное форматирование. Этот метод позволяет:
- 🔴 Выделять даты, которые истекли (например, дедлайны проектов).
- 🟢 Подсвечивать даты в определённом диапазоне (например, текущий месяц).
- 🟡 Отмечать даты с нестандартными условиями (например, выходные дни).
Пример: выделение просроченных задач:
- Выделите диапазон с датами.
- Перейдите на вкладку
Главная→Условное форматирование→Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу:
=A1(где A1— первая ячейка диапазона). - Задайте формат (например, красный текст на сером фоне).
Для более сложных условий можно комбинировать функции. Например, чтобы выделить даты, которые попадают на последний день месяца:
=И(ДЕНЬ(A1)=ДАТАМЕС(A1;1)-A1; МЕСЯЦ(A1)=МЕСЯЦ(СЕГОДНЯ()))
Условное форматирование удобно тем, что не скрывает данные, а только визуально их группирует. Это полезно, если вам нужно анализировать таблицу целиком, но при этом быстро находить критичные записи.
5. Power Query: фильтрация больших данных без формул
Если вы работаете с таблицами на 100 000+ строк, обычные фильтры Excel начинают тормозить. В таких случаях лучше использовать Power Query — инструмент для обработки и трансформации данных, встроенный в Excel 2016+. Он позволяет:
- 📊 Фильтровать даты по любым условиям без нагрузки на файл.
- 🔄 Автоматически обновлять данные при изменении источника.
- 📁 Объединять несколько таблиц с датами (например, из разных месяцев).
Пример: фильтрация продаж за текущий год с помощью Power Query:
- Выделите вашу таблицу и перейдите на вкладку
Данные→Из таблицы/диапазона(в группеПолучить и преобразовать данные). - В открывшемся редакторе Power Query найдите столбец с датой и нажмите на стрелку фильтра.
- Выберите
Фильтры даты→Настраиваемый фильтр. - Задайте условие:
дата больше или равно 01.01.2023идата меньше или равно 31.12.2023. - Нажмите
ОК, затемЗакрыть и загрузить.
Преимущество Power Query в том, что все шаги фильтрации сохраняются и могут быть переиспользованы для новых данных. Например, если вы ежемесячно получаете отчёт с продажами, достаточно обновить запрос (Данные → Обновить все), и фильтрация применится автоматически.
Для сложных условий (например, фильтрация по рабочим дням с учётом праздников) в Power Query можно использовать язык M. Пример кода для исключения выходных:
let
Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
FilteredRows = Table.SelectRows(Source, each Date.DayOfWeek([Дата]) <> 6 and Date.DayOfWeek([Дата]) <> 0)
in
FilteredRows
Где 6 — суббота, 0 — воскресенье.
6. Динамические диапазоны и сводные таблицы
Если вам нужно не только отфильтровать данные по дате, но и агрегировать их (например, посчитать сумму продаж по месяцам), оптимальное решение — сводные таблицы. Они позволяют:
- 📅 Группировать даты по годам, кварталам, месяцам или дням.
- 📈 Строить динамические графики на основе отфильтрованных данных.
- 🔍 Использовать срезы (slicers) для интерактивной фильтрации.
Пример создания сводной таблицы с группировкой по месяцам:
- Выделите исходную таблицу с данными.
- Перейдите на вкладку
Вставка→Сводная таблица. - В области
Строкиперетащите поле с датой. - Щёлкните правой кнопкой по дате в сводной таблице →
Группировать. - Выберите
Месяцы(или другие интервалы: дни, кварталы). - В область
Значенияперетащите поле, которое нужно агрегировать (например, "Сумма продаж").
Для динамической фильтрации добавьте срез:
- Выделите сводную таблицу.
- Перейдите на вкладку
Анализ(илиОпциив старых версиях) →Вставить срез. - Отметьте поле, по которому хотите фильтровать (например, "Год").
Срезы позволяют интерактивно менять фильтры одним кликом, что удобно для презентаций или дашбордов. Например, можно создать срез по годам и быстро переключаться между 2022, 2023 и 2026 годами.
Как создать выпадающий список с датами?
Чтобы пользователь мог выбирать дату из списка, а таблица автоматически фильтровалась:
1. Создайте диапазон с уникальными датами (используйте Данные → Удалить дубликаты).
2. Перейдите на вкладку Данные → Проверка данных.
3. В поле Тип данных выберите Список и укажите диапазон с датами.
4. Свяжите этот список с формулой ФИЛЬТР или расширенным фильтром.
FAQ: Ответы на частые вопросы
Почему фильтр по дате не работает? Я ввожу условие, но данные не отображаются.
Наиболее частые причины:
- Столбец с датой имеет текстовый формат. Проверьте это, выделив ячейку: если дата выровнена по левому краю — это текст. Исправьте с помощью
=ДАТАЗНАЧ(). - В данных есть скрытые символы (пробелы, переносы строк). Используйте
=ПЕЧСИМВ()для очистки. - Указан неверный диапазон в расширенном фильтре. Убедитесь, что диапазон условий включает заголовки.
- Дата в условии введена в другом формате, чем в данных (например, "01.01.2023" vs "01-янв-23").
Чтобы диагностировать проблему, попробуйте отфильтровать столбец по одному значению (выделите дату в списке автофильтра). Если это сработает, проблема в формате условий.
Как отфильтровать даты по текущему месяцу автоматически?
Используйте динамические формулы:
- Для автофильтра: в ручном режиме укажите диапазон с
01.текущий_месяц.текущий_годпоконец_месяца(например,01.05.2026-31.05.2026). - Для формул:
=ФИЛЬТР(A2:D100;
(МЕСЯЦ(A2:A100)=МЕСЯЦ(СЕГОДНЯ()))*(ГОД(A2:A100)=ГОД(СЕГОДНЯ()));
"Нет данных"
)
- Для условного форматирования: формула
=И(МЕСЯЦ(A1)=МЕСЯЦ(СЕГОДНЯ()); ГОД(A1)=ГОД(СЕГОДНЯ())).
Чтобы месяц обновлялся автоматически, используйте СЕГОДНЯ() или TODAY() (в английской версии).
Можно ли фильтровать даты по рабочим/выходным дням?
Да, для этого есть несколько способов:
- Функция
ДЕНЬНЕД:- Суббота:
=ДЕНЬНЕД(A1;2)=6 - Воскресенье:
=ДЕНЬНЕД(A1;2)=7 - Рабочие дни:
=И(ДЕНЬНЕД(A1;2)<>6; ДЕНЬНЕД(A1;2)<>7)
- Суббота:
M (см. раздел 5).Для учёта праздничных дней потребуется дополнительная таблица с датами праздников и функция ПОИСКПОЗ.
Как фильтровать даты по кварталам?
Есть 3 варианта:
- 📌 Группировка в сводной таблице: выберите поле с датой → правая кнопка →
Группировать→Кварталы. - 📊 Формула для определения квартала:
=ОКРВВЕРХ(МЕСЯЦ(A1)/3; 0)Она вернёт номер квартала (1–4). Затем фильтруйте по этому столбцу.
- 🔍 Расширенный фильтр: создайте диапазон условий с формулами для начала и конца квартала. Например, для II квартала 2023:
Дата >=01.04.2023 <=30.06.2023
Почему после фильтрации пропали некоторые строки?
Вероятные причины:
- В данных есть пустые ячейки или ошибки (например,
#ЗНАЧ!). Автофильтр их скрывает. Чтобы увидеть, снимите фильтр или используйтеДанные → Фильтр → Отменить фильтрацию. - Применён двойной фильтр: проверьте, не активны ли фильтры в нескольких столбцах одновременно.
- Данные отсортированы некорректно: перед фильтрацией выполните сортировку по дате (
Данные → Сортировка). - В расширенном фильтре указан неверный диапазон условий. Убедитесь, что заголовки в диапазоне условий полностью совпадают с заголовками в исходной таблице (включая регистр).
Чтобы диагностировать проблему, попробуйте отфильтровать данные по одному критерию (например, только по дате). Если строки появятся, проблема в дополнительных условиях.