Диалоговое окно Расширенный фильтр может показаться сложным из-за наличия параметров:
Способ обработки исходных данных.
Чтобы показать результат фильтрации на месте, скрыв ненужные строки (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
Результат выполнения макроса
Получилось!
Надеюсь, данный урок оказался полезен и интересен. В следующем уроке продолжим изучение применения расширенного фильтра и будем формировать отчеты нажатием кнопки.