ШКОЛА ПРОГРАММИРОВАНИЯ
Опубликовано на ШКОЛА ПРОГРАММИРОВАНИЯ (http://www.programm-school.ru)

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

Расширенный фильтр в 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

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

Получилось!

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

Категории: 
Макросы [1]
VBA Excel [2]
Опубликовал Bukasheva_T в ср, 15/08/2018 - 15:27
//
Рейтинг@Mail.ru
(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter20614318 = new Ya.Metrika({id:20614318, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");

Расскажи о сайте друзьям

(function(w, d, n) { w[n] = w[n] || []; w[n].push({ section_id: 111053, place: "advertur_111053", width: 300, height: 250 }); })(window, document, "advertur_sections");

Источник: http://www.programm-school.ru/rasshirennyy-filtr-v-excel-makrosom

Ссылки
[1] http://www.programm-school.ru/vba_lessons
[2] http://www.programm-school.ru/excel_vba