Този урок ще покаже как да използвате филтъра за обобщена таблица във VBA.
Обобщените таблици са изключително мощен инструмент за данни на Excel. Обобщените таблици ни позволяват да анализираме и интерпретираме големи количества данни чрез групиране и обобщаване на полета и редове. Можем да приложим филтри към нашите обобщени таблици, за да можем бързо да видим данните, които са от значение за нас.
Първо, трябва да създадем обобщена таблица за нашите данни. (Щракнете тук за нашето Ръководство за обобщена таблица VBA).
Създаване на филтър въз основа на стойност на клетката
Можете да филтрирате в обобщена таблица с помощта на VBA въз основа на данни, съдържащи се в стойност на клетка - можем да филтрираме или в полето Страница, или в поле Ред (например в полето Доставчик по -горе или полето Oper, което е в колоната Етикети на редове ).
В празна клетка вдясно от обобщената таблица създайте клетка, която да държи филтъра, и след това въведете данните в клетката, по която искате да филтрирате обобщената таблица.
Създайте следния VBA макрос:
1234567 | Sub FilterPageValue ()Затъмнете pvFld като PivotFieldDim strFilter As StringЗадайте pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Supplier")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ValuepvFld.CurrentPage = strFilterEnd Sub |
Изпълнете макроса, за да приложите филтъра.
За да изчистите филтъра, създайте следния макрос:
12345 | Sub ClearFilter ()Затъмнете pTbl като обобщена таблицаЗадайте pTbl = ActiveSheet.PivotTables ("PivotTable1")pTbl.ClearAllFiltersEnd Sub |
След това филтърът ще бъде премахнат.
След това можем да променим критериите за филтриране, за да филтрираме по ред в обобщената таблица, а не върху текущата страница.
Въвеждането на следния макрос след това ще ни позволи да филтрираме по реда (имайте предвид, че обобщеното поле за филтриране вече е Oper, а не доставчик).
1234567 | ПодфилтърRowValue ()Затъмнете pvFld като PivotFieldDim strFilter As StringЗадайте pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Range ("M4"). ValuepvFld.PivotFilters.Add2 xlCaptionEquals ,, strFilterEnd Sub |
Изпълнете макроса, за да приложите филтъра.
Използване на множество критерии в обобщен филтър
Можем да добавим към филтъра за стойност на ред по -горе, като добавим допълнителни критерии.
Въпреки това, тъй като стандартният филтър скрива редовете, които не са задължителни, трябва да преминем през критериите и да покажем тези, които са повторно зададени, като същевременно скрием тези, които не са задължителни. Това става чрез създаване на променлива Array и използване на няколко цикъла в кода.
1234567891011121314151617181920212223 | ПодфилтърMultipleRowItems ()Dim vArray като вариантDim i като цяло число, j като цяло числоЗатъмнете pvFld като PivotFieldЗадайте pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")vArray = Диапазон ("M4: M5")pvFld.ClearAllFiltersС pvFldЗа i = 1 Към pvFld.PivotItems.Countj = 1Do Докато j <= UBound (vArray, 1) - LBound (vArray, 1) + 1Ако pvFld.PivotItems (i) .Name = vArray (j, 1) ТогаваpvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = TrueИзлезте от DoИначеpvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = FalseКрай Акоj = j + 1ЦикълСледва iКрай сEnd Sub |
Създаване на филтър въз основа на променлива
Можем да използваме същите концепции за създаване на филтри въз основа на променливи в нашия код, а не на стойността в клетка. Този път променливата на филтъра (strFilter) се попълва в самия код (напр .: Твърдо кодирана в макроса).
1234567 | Sub FilterTextValue ()Затъмнете pvFld като PivotFieldDim strFilter As StringЗадайте pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Доставчик")strFilter = "THOMAS S"pvFld.CurrentPage = strFilterEnd Sub |