Почему фильтрация дат в Excel — это не так просто, как кажется
На первый взгляд, отсортировать даты в Microsoft Excel по порядку — задача элементарная. Но любой, кто хотя бы раз пытался отфильтровать столбец с датами типа "01.01.2023", "31.12.2022" или "15-мар-2026", знает: программа иногда упрямо игнорирует хронологический порядок. Вместо ожидаемой последовательности от старых дат к новым Excel может выдать алфавитную сортировку ("15-мар" перед "31- дек") или вообще преобразовать формат в текст.
Проблема кроется в том, как Excel интерпретирует данные. Если ячейки содержат даты в формате текста (например, скопированные из PDF или веб-страницы), а не в формате даты/времени, все методы сортировки дадут сбой. Даже опытные пользователи иногда упускают этот нюанс, теряя часы на поиск решения. В этой статье разберём три ключевых метода фильтрации дат — от базового до продвинутого — с учётом всех подводных камней.
Подготовка данных: почему Excel "не видит" ваши даты
Прежде чем фильтровать даты, убедитесь, что Excel распознаёт их как даты, а не как текст. Самый простой тест: выделите ячейку и посмотрите на строку формул. Если там отображается 45678 (порядковый номер даты в системе Excel) — формат корректный. Если же вы видите '15.03.2026 или 15-мар — это текст.
Чтобы преобразовать текст в дату:
- 📅 Используйте функцию
=ДАТАЗНАЧ()(или=DATEVALUE()в английской версии). Например,=ДАТАЗНАЧ("15.03.2026")вернёт серийный номер даты. - 🔄 Примените формат ячейки: выделите столбец →
Главная → Формат → Формат ячеек → Датаи выберите подходящий шаблон (например,14.03.2012). - ⚡ Используйте инструмент
Текст по столбцам(Данные → Текст по столбцам), если даты импортированы из CSV с разделителями.
⚠️ Внимание: Если после преобразования даты отображаются как ######, расширьте столбец — ячейка слишком узкая для формата.
Метод 1: Базовая сортировка дат (от старых к новым и наоборот)
Самый быстрый способ отсортировать даты — использовать встроенную функцию сортировки. Этот метод подходит, если:
- 🗂️ Данные уже в формате даты (не текст).
- 📊 Нужно отсортировать весь столбец или таблицу.
- 🔄 Требуется порядок по возрастанию или убыванию.
Инструкция:
- Выделите диапазон ячеек с датами (включая заголовок столбца).
- Перейдите на вкладку
Главная→ группаРедактирование→Сортировка и фильтр. - Выберите
Сортировка от минимального к максимальному(по возрастанию) или наоборот. - Если Excel спрашивает,
"Расширить выделенный фрагмент?", нажмитеСортировать.
Для более точной настройки:
- 🎯 Используйте
Данные → Сортировка, чтобы выбрать столбец для сортировки и добавить уровни (например, сначала по дате, затем по имени). - 🔍 Включите
Мои данные содержат заголовки, если первая строка — название столбца.
| Действие | Результат | Примечание |
|---|---|---|
| Сортировка по возрастанию | 01.01.2020 → 15.03.2023 → 30.12.2023 | От старых дат к новым |
| Сортировка по убыванию | 30.12.2023 → 15.03.2023 → 01.01.2020 | От новых дат к старым |
| Сортировка по цвету | Даты с красным фоном → с жёлтым → без цвета | Если ячейки выделены условным форматированием |
Метод 2: Фильтрация дат по диапазону (например, за последний месяц)
Часто требуется не просто отсортировать даты, а отфильтровать их по определённому периоду — например, показать только записи за текущий год или за последние 30 дней. Для этого используйте автофильтр или расширенный фильтр.
Шаги для автофильтра:
- Выделите заголовок столбца с датами.
- Нажмите
Данные → Фильтр(илиCtrl+Shift+L). - Кликните на стрелку фильтра в заголовке столбца →
Фильтры по дате. - Выберите нужный вариант:
- 📅
Завтра/Сегодня/Вчера - 📆
Этот месяц/Прошлый месяц - 🔍
Настраиваемый фильтр(для произвольного диапазона).
- 📅
Для настраиваемого фильтра:
- В окне
Пользовательский автофильтрвыберите условия, например:больше или равно→01.01.2026именьше или равно→31.03.2026. - Используйте
И/ИЛИдля комбинирования условий (например, даты за январь или март).
Убедиться, что столбец в формате "Дата"|Применить автофильтр (Ctrl+Shift+L)|Выбрать "Фильтры по дате"|Задать диапазон в настраиваемом фильтре|Проверить результат на тестовых данных-->
⚠️ Внимание: Если в настраиваемом фильтре указать дату в формате15/03/2026вместо15.03.2026, Excel может не распознать её из-за региональных настроек. Всегда используйте формат, соответствующий вашей локали.
Метод 3: Продвинутая фильтрация с формулами (для динамических диапазонов)
Автофильтр подходит для разовых задач, но если нужно автоматически обновлять фильтрацию при добавлении новых данных, используйте формулы массива или функцию ФИЛЬТР (в Excel 365 и 2021).
Пример 1: Фильтрация дат за последние 30 дней (динамически):
=ФИЛЬТР(A2:B100; (B2:B100>=СЕГОДНЯ()-30)*(B2:B100<=СЕГОДНЯ()); "Нет данных")
Где:
A2:B100— диапазон с данными (столбец A — названия, столбец B — даты).СЕГОДНЯ()-30— дата 30 дней назад от сегодняшнего дня."Нет данных"— сообщение, если нет подходящих записей.
Пример 2: Фильтрация по кварталу (с использованием функции МЕСЯЦ):
=ФИЛЬТР(A2:B100; (МЕСЯЦ(B2:B100)>=1)*(МЕСЯЦ(B2:B100)<=3); "Нет данных за 1 квартал")
Для старых версий Excel (до 2019) используйте комбинацию ИНДЕКС/ПОИСКПОЗ или сводные таблицы.
Как работает функция ФИЛЬТР в Excel 365?
Функция ФИЛЬТР — это динамическая формула массива, которая автоматически обновляет результат при изменении исходных данных. Она принимает три аргумента:
1. массив — диапазон для фильтрации;
2. включать — условие (или массив условий), например B2:B100>ДАТА(2026;1;1);
3. если_пусто — значение, если нет совпадений.
Важно: в Excel 2019 и ранее эта функция недоступна — используйте ДВССЫЛ или Power Query.
Ошибки при фильтрации дат и как их исправить
Даже опытные пользователи сталкиваются с ошибками при работе с датами. Вот самые распространённые и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Даты сортируются как текст (15.01 → 2.03) |
Ячейки в текстовом формате | Примените ДАТАЗНАЧ или измените формат ячейки на Дата |
| Фильтр не находит даты (пустой результат) | Несовпадение форматов (например, ДД.ММ.ГГГГ vs ММ/ДД/ГГГГ) |
Унифицируйте формат через Формат ячеек |
Ошибка #ЗНАЧ! в формулах |
Некорректный диапазон или тип данных | Проверьте, что все ячейки в диапазоне — даты, а не текст |
| Даты "сбиваются" при обновлении | Автоматическое преобразование региональных настроек | Закрепите формат через Главная → Числовой формат → Другие форматы дат |
Ещё одна типичная проблема — скрытые символы в ячейках (например, пробелы или неразрывные пробелы). Чтобы их удалить, используйте:
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" ";"");СИМВОЛ(160);"")
Автоматизация: макросы для фильтрации дат
Если вам регулярно приходится фильтровать даты по одним и тем же критериям, имеет смысл записать макрос. Например, следующий код отфильтрует даты за текущий месяц:
Sub FilterCurrentMonth()
Dim ws As Worksheet
Dim rng As Range
Set ws = ActiveSheet
Set rng = ws.Range("A1:B100") ' Диапазон с данными
' Применяем автофильтр
rng.AutoFilter Field:=2, Criteria1:=">=1-" & Month(Date) & "-" & Year(Date), _
Operator:=xlAnd, Criteria2:="<=" & Day(Date) & "-" & Month(Date) & "-" & Year(Date)
End Sub
Чтобы использовать этот макрос:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в модуль (
Insert → Module). - Назначьте макросу сочетание клавиш или кнопку на листе.
Для более сложных сценариев (например, фильтрация по нескольким столбцам) можно модифицировать код, добавив дополнительные условия:
rng.AutoFilter Field:=1, Criteria1:="=Да" ' Фильтр по другому столбцу
rng.AutoFilter Field:=2, Criteria1:=">=" & Date - 7 ' Даты за последнюю неделю
⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). При открытии такого файла Excel может показать предупреждение о безопасности — разрешите выполнение макросов, если доверяете источнику.
FAQ: Ответы на частые вопросы о фильтрации дат в Excel
Как отфильтровать даты по дню недели (например, только понедельники)?
Используйте функцию =ДЕНЬНЕД(ячейка), которая возвращает номер дня недели (1 — воскресенье, 2 — понедельник и т. д.). Для фильтрации:
- Добавьте вспомогательный столбец с формулой
=ДЕНЬНЕД(B2). - Примените автофильтр к этому столбцу и выберите значение
2(для понедельника).
В Excel 365 можно обойтись без вспомогательного столбца:
=ФИЛЬТР(A2:B100; ДЕНЬНЕД(B2:B100)=2; "Нет понедельников")
Почему после фильтрации даты отображаются как числа (например, 45341)?
Это серийный номер даты в системе Excel (1 января 1900 года = 1). Чтобы вернуть нормальный вид:
- Выделите ячейки →
Главная → Формат → Формат ячеек → Дата. - Выберите нужный формат (например,
14.03.2012).
Если формат не применяется, проверьте, не установлен ли для ячеек текстовый формат по умолчанию.
Можно ли фильтровать даты по времени (например, утро/вечер)?
Да, если в ячейках хранятся дата и время (формат ДД.ММ.ГГГГ ЧЧ:ММ). Используйте:
- Автофильтр →
Фильтры по дате → Настраиваемый фильтр→ укажите время (например,>=08:00:00и<=12:00:00для утра). - Функцию
=ЧАС(ячейка)для извлечения часа (например,=ЧАС(A1)>=8для времени после 8:00).
Как отсортировать даты по кварталам или полугодиям?
Добавьте вспомогательный столбец с формулой для определения квартала:
=ОКРУГЛВВЕРХ(МЕСЯЦ(A1)/3;0)
Затем отсортируйте данные по этому столбцу. Для полугодий:
=ЕСЛИ(МЕСЯЦ(A1)<=6;1;2)
В Excel 365 можно использовать ФИЛЬТР с условием:
=ФИЛЬТР(A2:B100; ОКРУГЛВВЕРХ(МЕСЯЦ(B2:B100)/3;0)=1; "Нет данных за 1 квартал")
Почему при фильтрации дат некоторые строки пропадают?
Это происходит, если:
- В ячейках есть пустые значения или ошибки (например,
#Н/Д). - Применён дополнительный фильтр по другому столбцу (проверьте стрелку фильтра в заголовках).
- Данные в столбце имеют разные форматы (например, часть дат — текст, часть — числа).
Решение: очистите фильтры (Данные → Фильтр → Очистить) и проверьте данные на наличие скрытых символов.