VBA - фильтр сводной таблицы

В этом руководстве будет показано, как использовать фильтр сводной таблицы в VBA.

Сводные таблицы - это исключительно мощный инструмент для работы с данными в Excel. Сводные таблицы позволяют нам анализировать и интерпретировать большие объемы данных путем группировки и суммирования полей и строк. Мы можем применять фильтры к нашим сводным таблицам, чтобы мы могли быстро увидеть релевантные нам данные.

Во-первых, нам нужно создать сводную таблицу для наших данных. (Щелкните здесь, чтобы просмотреть руководство по сводной таблице VBA).

Создание фильтра на основе значения ячейки

Вы можете фильтровать сводную таблицу с помощью VBA на основе данных, содержащихся в значении ячейки - мы можем фильтровать либо по полю страницы, либо по полю строки (например, по полю «Поставщик» выше или по полю «Операция», которое находится в столбце «Ярлыки строк»). ).

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

Создайте следующий макрос VBA:

1234567 Sub FilterPageValue ()Dim pvFld As PivotFieldDim strFilter как строкаУстановите pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Supplier")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ValuepvFld.CurrentPage = strFilterКонец подписки

Запустите макрос, чтобы применить фильтр.

Чтобы очистить фильтр, создайте следующий макрос:

12345 Sub ClearFilter ()Dim pTbl As PivotTableУстановите pTbl = ActiveSheet.PivotTables ("PivotTable1")pTbl.ClearAllFiltersКонец подписки

После этого фильтр будет удален.

Затем мы можем изменить критерии фильтрации, чтобы фильтровать по строке в сводной таблице, а не по текущей странице.

После ввода следующего макроса мы сможем выполнить фильтрацию по строке (обратите внимание, что поле Pivot для фильтрации теперь является оператором, а не поставщиком).

1234567 Sub FilterRowValue ()Dim pvFld As PivotFieldDim strFilter как строкаУстановите pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ValuepvFld.PivotFilters.Add2 xlCaptionEquals`` strFilterКонец подписки

Запустите макрос, чтобы применить фильтр.

Использование нескольких критериев в сводном фильтре

Мы можем добавить к фильтру значений строки выше, добавив дополнительные критерии.

Однако, поскольку стандартный фильтр скрывает строки, которые не требуются, нам нужно перебрать критерии и показать те, которые требуются, и скрыть те, которые не требуются. Это делается путем создания переменной Array и использования пары циклов в коде.

1234567891011121314151617181920212223 Sub FilterMultipleRowItems ()Dim vArray как вариантDim i как целое число, j как целое числоDim pvFld As PivotFieldУстановите pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")vArray = Диапазон ("M4: M5")pvFld.ClearAllFiltersС pvFldДля i = 1 в pvFld.PivotItems.Countj = 1Выполнить Пока j <= UBound (vArray, 1) - LBound (vArray, 1) + 1Если pvFld.PivotItems (i) .Name = vArray (j, 1) ТогдаpvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = TrueВыход СделатьЕщеpvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = FalseКонец, еслиj = j + 1ПетляДалее яКонец сКонец подписки

Создание фильтра на основе переменной

Мы можем использовать те же концепции для создания фильтров на основе переменных в нашем коде, а не значения в ячейке. На этот раз переменная фильтра (strFilter) заполняется в самом коде (например: жестко запрограммирована в макрос).

1234567 Sub FilterTextValue ()Dim pvFld As PivotFieldDim strFilter как строкаУстановите pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Supplier")strFilter = "THOMAS S"pvFld.CurrentPage = strFilterКонец подписки

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave