RSS

Расширенный фильтр в Excel

Диалоговое окно Расширенный фильтр может показаться сложным из-за наличия параметров:

Способ обработки исходных данных.

Чтобы показать результат фильтрации на месте, скрыв ненужные строки (Action:= xlFilterInPlace), выберите переключатель «фильтровать список на месте». Для копирования результата фильтрации в другой диапазон (Action:= xlFilterCopy) выберите «скопировать результат в другое место».

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

Диапазон условий (CriteriaRange): диапазон с условиями для отбора значений.

Поместить результат в диапазон (CopyToRange): выходной диапазон (указываются только заголовки столбцов), если выбран способ обработки исходных данных «скопировать результат в другое место».

Только уникальные записи (Unique). Если нужно отобрать только уникальные значения из заданного диапазона, то устанавливаем флажок.

Воспользуемся расширенным фильтром с помощью интерфейса программы.

Исходная таблица содержит данные о поступлении товаров.

Диапазон условий:

В условиях можно использовать знаки сравнения(>, <, >=, <=) , логические функции (и, или), подстановочные символы(?, *).

Отберем строки с датой в интервале с 13.08.2018 до 14.08.2018 и номенклатурой «Апельсин».

Условия в разных строках объединяются логической операцией ИЛИ.

Отберем строки с датой в интервале от 13.08.2018 до 14.08.2018 и номенклатурой («Апельсин» или «Лимон»).

Для фильтрации строк в другую область листа скопируем заголовок исходного диапазона

Заполним параметры расширенного фильтра

Результат фильтрации

Команда Данные- Сортировка и фильтр – Дополнительно –Расширенный фильтр может быть выполнена методом VBA Range.AdvancedFilter

Создадим макрос

Sub adv_filter()
    Dim IRange As Range
    Dim CRange As Range
    Dim ORange As Range
    Dim wsh As Worksheet
    Set wsh = ThisWorkbook.Worksheets("Приход")
    Set IRange = wsh.Range("A1:H5") 'исходный диапазон
    Set CRange = wsh.Range("J1:L3") 'диапазон условий
    wsh.Range("A1:H1").Copy wsh.Range("N1") ' копирование заголовка
    Set ORange = wsh.Range("N1:U1") 'выходной диапазон
    IRange.AdvancedFilter xlFilterCopy, CRange, ORange 'расширенный фильтр
    Set wsh = Nothing
    Set IRange = Nothing
    Set CRange = Nothing
    Set ORange = Nothing
End Sub

И в результате выполнения макроса

Фильтр не сработал? Дело в том, что в диапазоне условий есть условие для данных типа Дата (ячейки J2, J3, K2, K3). 

Объекты Range и Cells имеют свойства Text, Value и Value2. Рассмотрим каждое из этих свойств

Text — позволяет получить значение ячейки диапазона в виде значения типа String

Value — позволяет получить и установить основное значение ячейки. Тип может быть разным

Value2 — то же, что и Value ,за исключением ячеек, отформатированных как Валюта и Дата

Вставим в ячейки M2 и M3 начальную и конечную дату периода для фильтрации данных

​Range(«M2″).Text=»13.08.2018» (тип  String)

Range(«M2»).Value=#13.08.2018# (тип Date)
Range(«M2»).Value2=43325 (тип Double)

Для того, чтобы мы могли сравнить дату в исходном диапазоне с датой в диапазоне условий, воспользуемся свойством Value2. Подредактируем код макроса

 

Sub adv_filter()
    Dim IRange As Range
    Dim CRange As Range
    Dim ORange As Range
    Dim wsh As Worksheet
    Set wsh = ThisWorkbook.Worksheets("Приход")
    Set IRange = wsh.Range("A1:H5") 'Исходный диапазон
    wsh.Range("J2").Value2 = ">=" & wsh.Range("M2").Value2
    wsh.Range("J3").Value2 = ">=" & wsh.Range("M2").Value2
    wsh.Range("K2").Value2 = "<=" & wsh.Range("M3").Value2
    wsh.Range("K3").Value2 = "<=" & wsh.Range("M3").Value2
    Set CRange = wsh.Range("J1:L3") 'диапазон условий
    wsh.Range("A1:H1").Copy wsh.Range("N1") ' копирование заголовков
    Set ORange = wsh.Range("N1:U1") 'выходной диапазон
    IRange.AdvancedFilter xlFilterCopy, CRange, ORange 'расширенный фильтр
    Set wsh = Nothing
    Set IRange = Nothing
    Set CRange = Nothing
    Set ORange = Nothing
End Sub

Результат выполнения макроса

Получилось!

Надеюсь, данный урок оказался полезен и интересен. В следующем уроке продолжим изучение применения расширенного фильтра и будем формировать отчеты нажатием кнопки.