Работа с датами в Microsoft Excel — одна из самых востребованных задач при анализе временных рядов, финансовых отчетов или продаж. Но что делать, если вам нужно быстро отобразить данные только за январь 2023 или сравнить показатели по кварталам? Ручное прокручивание тысяч строк — не вариант. В этой статье мы разберём 5 проверенных способов фильтрации по месяцам, от базовых до продвинутых, с учётом нюансов формата дат и производительности.
Вы узнаете, как:
- 🔍 Использовать стандартный автофильтр для быстрой выборки по месяцу (даже если даты записаны как текст).
- 📊 Создавать сводные таблицы с группировкой по месяцам и годам за 3 клика.
- 📝 Применять формулы (включая
FILTER,QUERYи массивы) для динамической фильтрации. - ⚡ Автоматизировать процесс с помощью Power Query и макросов VBA.
Особое внимание уделим распространённой ошибке, из-за которой фильтр "не видит" месяцы — неправильный формат ячеек. Также покажем, как обойти ограничения Excel при работе с датами до 1900 года.
1. Базовый способ: автофильтр по месяцам
Самый простой метод — использовать встроенный автофильтр. Он подходит для таблиц до 10 000 строк и не требует знания формул. Вот как это работает:
- Выделите заголовок столбца с датами (например,
"Дата продажи"). - Перейдите на вкладку
Данные→Фильтр(или нажмитеCtrl+Shift+L). - Нажмите на стрелочку фильтра в заголовке столбца и выберите
Фильтры по дате→Все даты в периоде→Январь(или нужный месяц).
Если в выпадающем списке нет пунктов по месяцам, проблема в формате ячеек:
- 📅 Правильный формат:
Дата(например,15.05.2023). - ❌ Неправильный формат:
Текст(например,"15 мая"или"2023-05-15").
Для исправления:
- Выделите столбец с датами.
- Нажмите
Ctrl+1(или правая кнопка →Формат ячеек). - Выберите категорию
Датаи укажите тип (например,14.03.2012).
⚠️ Внимание: Если даты хранятся как текст (например,"01.01.2023"), автофильтр не сможет их распознать. Используйте функцию=ДАТАЗНАЧ(A2)в дополнительном столбце или преобразуйте данные черезТекст по столбцам(вкладкаДанные).
2. Фильтрация по месяцам с помощью сводных таблиц
Сводные таблицы идеальны для анализа больших массивов данных. Они позволяют группировать даты по месяцам, кварталам или годам автоматически. Алгоритм действий:
- Выделите исходную таблицу (включая заголовки).
- Перейдите на вкладку
Вставка→Сводная таблица. - В открывшемся окне подтвердите диапазон и выберите, куда вставить таблицу (например,
Новый лист). - В панели
Поля сводной таблицыперетащите столбец с датами в областьСтроки, а нужные числовые данные (например,Сумма продаж) — в областьЗначения. - Щёлкните правой кнопкой по любой дате в сводной таблице →
Группировка→ выберитеМесяцы(и при необходимостиГоды).
Преимущества метода:
- 📈 Автоматическая агрегация данных (суммы, средние, счётчики).
- 🔄 Легкое переключение между месяцами с помощью фильтров.
- 📊 Возможность построения графиков прямо из сводной таблицы.
| Формат исходных данных | Подходит для сводной? | Действие при ошибке |
|---|---|---|
ДД.ММ.ГГГГ (дата) |
✅ Да | — |
МММ-ГГ (например, "Янв-23") |
❌ Нет | Преобразовать в дату через ДАТАЗНАЧ + ТЕКСТ |
ГГГГ-ММ-ДД (ISO) |
✅ Да | Excel распознаёт автоматически |
Текст (например, "1 января") |
❌ Нет | Использовать ПОИСК + ВПР для извлечения месяца |
3. Формулы для динамической фильтрации
Если вам нужна гибкая фильтрация, которая обновляется при изменении исходных данных, используйте формулы. Рассмотрим три подхода:
3.1. Функция FILTER (Excel 365 и 2021)
Самый современный способ — функция FILTER, которая возвращает динамический массив:
=FILTER(диапазон_данных; МЕСЯЦ(диапазон_дат)=5; "Нет данных за май")
Где:
диапазон_данных— столбцы, которые нужно отфильтровать (например,A2:C100).диапазон_дат— столбец с датами (например,A2:A100).5— номер месяца (май).
3.2. Формула массива (для старых версий Excel)
В Excel 2019 и ранее используйте комбинацию ЕСЛИ + МЕСЯЦ:
=ЕСЛИОШИБКА(ИНДЕКС($B$2:$B$100; НАИМЕНЬШИЙ(ЕСЛИ(МЕСЯЦ($A$2:$A$100)=5; СТРОКА($A$2:$A$100)-1); СТРОКА(A1))); "")
Введите формулу как формулу массива (завершите нажатием Ctrl+Shift+Enter в Excel 2019).
3.3. Функция QUERY (Excel для Mac/Google Sheets)
В Google Таблицах или Excel для Mac удобно использовать QUERY:
=QUERY(A1:C100; "SELECT A, B, C WHERE MONTH(A) = 5"; 1)
Как извлечь номер месяца из текстовой даты?
Если даты хранятся как текст (например, "15 мая 2023"), используйте комбинацию функций:
=МЕСЯЦ(ДАТАЗНАЧ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2; "января"; "-01-"); "февраля"; "-02-"); " "; ".")))
Эта формула заменяет названия месяцев на их номера и преобразует текст в дату.
⚠️ Внимание: Формулы массива (FILTER,QUERY) могут замедлять работу книги при обработке более 50 000 строк. В таких случаях используйте Power Query (см. следующий раздел).
4. Power Query: фильтрация без формул
Power Query (или Get & Transform в Excel 2016+) — это инструмент для импорта и преобразования данных без формул. Он идеален для больших файлов и повторяющихся задач.
Пошаговая инструкция:
- Выделите исходную таблицу и перейдите на вкладку
Данные→Из таблицы/диапазона(илиGet Data → From Table/Range). - В открывшемся редакторе Power Query выделите столбец с датами.
- На вкладке
Преобразовать(Transform) выберитеДата → Месяц → Название(илиНомер). - Щёлкните на стрелочку фильтра в заголовке столбца и выберите нужные месяцы.
- Нажмите
Закрыть и загрузить(Close & Load), чтобы вернуть данные в Excel.
Преимущества Power Query:
- 🚀 Обрабатывает миллионы строк без тормозов.
- 🔄 Сохраняет шаги преобразования — достаточно обновить данные (
Данные → Обновить все). - 📂 Можно объединять данные из нескольких файлов.
Убедитесь, что таблица имеет заголовки|Проверьте формат дат (должен быть "Дата")|Удалите пустые строки/столбцы|Сохраните файл перед импортом
-->
5. Макросы VBA для автоматизации
Если вам нужно фильтровать данные по месяцам регулярно (например, ежемесячные отчёты), напишите простой макрос. Пример кода для фильтрации текущего месяца:
Sub FilterByCurrentMonth()
Dim ws As Worksheet
Dim rng As Range
Dim currentMonth As Integer
Set ws = ActiveSheet
Set rng = ws.Range("A1").CurrentRegion ' Диапазон с данными
currentMonth = Month(Date) ' Текущий месяц
' Добавляем автофильтр, если его нет
If ws.AutoFilterMode = False Then
rng.AutoFilter
End If
' Фильтруем по текущему месяцу
rng.AutoFilter Field:=1, Criteria1:=">=01/" & currentMonth & "/" & Year(Date), _
Operator:=xlAnd, Criteria2:="<=" & Day(DateLastDay(Date)) & "/" & currentMonth & "/" & Year(Date)
End Sub
Как использовать:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Запустите макрос нажатием
F5или черезМакросы(вкладкаРазработчик).
Для фильтрации по конкретному месяцу замените currentMonth на номер месяца (например, 5 для мая).
⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). При открытии такого файла Excel может показать предупреждение о безопасности — разрешите выполнение макросов, если доверяете источнику.
6. Распространённые ошибки и их решения
Даже опытные пользователи сталкиваются с проблемами при фильтрации по месяцам. Разберём типичные случаи:
| Проблема | Причина | Решение |
|---|---|---|
| Фильтр не показывает месяцы в выпадающем списке | Дата хранится как текст | Преобразуйте в формат Дата через ДАТАЗНАЧ или Текст по столбцам |
| Сводная таблица не группирует даты | Пустые ячейки или неверный формат | Удалите пустые строки и проверьте формат (Ctrl+1) |
Формула FILTER возвращает ошибку #ЗНАЧ! |
Неверный диапазон или тип данных | Проверьте, что диапазоны одинакового размера и содержат даты |
| Power Query "не видит" месяцы | Локаль Excel отличается от локали данных | Измените локаль в Файл → Параметры → Язык |
Ещё одна скрытая ловушка — даты до 1900 года. Excel хранит даты как количество дней с 1 января 1900 года, поэтому более ранние даты (например, 01.01.1899) он воспринимает как текст. Решение:
- Используйте дополнительный столбец с формулой
=ДАТА(год; месяц; день). - Или преобразуйте данные в Power Query с указанием правильного формата.
FAQ: Ответы на частые вопросы
Как фильтровать по месяцу, если даты записаны как "2023-05-15" (ISO-формат)?
Excel автоматически распознаёт формат ГГГГ-ММ-ДД как дату. Если фильтр не работает:
- Выделите столбец.
- Нажмите
Ctrl+H(замена), в полеНайтивведите-, полеЗаменить наоставьте пустым. - Преобразуйте столбец в формат
ДатачерезФормат ячеек.
Можно ли фильтровать по месяцам в защищённом листе?
Да, но с ограничениями:
- Автофильтр будет работать, если при защите листа вы оставили разрешение на
Использование автофильтра(вкладкаРецензирование → Защитить лист). - Сводные таблицы и Power Query не требуют разблокировки листа.
- Макросы не будут выполняться, если лист защищён (разрешите редактирование объектов в настройках защиты).
Как отфильтровать данные за последние 3 месяца?
Используйте динамический диапазон:
- Создайте именованный диапазон (вкладка
Формулы → Диспетчер имён) с формулой:=ДАТА(ГОД(СЕГОДНЯ()); МЕСЯЦ(СЕГОДНЯ())-2; 1)(это дата начала периода — первый день месяца 3 месяца назад).
- Примените автофильтр с условием
"больше или равно"этому диапазону.
Или используйте FILTER (Excel 365):
=FILTER(A2:C100; (МЕСЯЦ(A2:A100)>=МЕСЯЦ(СЕГОДНЯ())-2); "Нет данных")
Почему после фильтрации пропали некоторые строки?
Вероятные причины:
- В данных есть скрытые символы (пробелы, переносы строк). Используйте
=ПЕЧСИМВ(A2)для очистки. - Дата записана как время (например,
15.05.2023 00:00:00). Примените форматДатабез времени. - Включён дополнительный фильтр в другом столбце. Проверьте все фильтры (
Данные → Очистить).
Как сохранить отфильтрованные данные в новый файл?
Способы:
- Копирование видимых ячеек:
- Примените фильтр.
- Выделите данные, нажмите
Alt+;(выделение видимых ячеек). - Скопируйте (
Ctrl+C) и вставьте в новый файл.
- Power Query:
- Загрузите данные в Power Query.
- Отфильтруйте по месяцу.
- Выберите
Закрыть и загрузить в → Новая книга.