Denna handledning visar hur du använder pivottabelfiltret i VBA.
Pivottabeller är ett exceptionellt kraftfullt dataverktyg i Excel. Pivottabeller gör att vi kan analysera och tolka stora datamängder genom att gruppera och sammanfatta fält och rader. Vi kan använda filter på våra pivottabeller så att vi snabbt kan se den data som är relevant för oss.
För det första måste vi skapa en pivottabell för våra data. (Klicka här för vår VBA Pivot Table Guide).
Skapa ett filter baserat på ett cellvärde
Du kan filtrera i en pivottabell med hjälp av VBA baserat på data som finns i ett cellvärde - vi kan antingen filtrera på sidfältet eller på ett radfält (till exempel i fältet Leverantör ovan eller Oper -fältet i kolumnen Radetiketter) ).
I en tom cell till höger om pivottabellen skapar du en cell för att hålla filtret och skriver sedan in data i cellen som du vill filtrera pivottabellen på.
Skapa följande VBA -makro:
1234567 | Sub FilterPageValue ()Dim pvFld som PivotFieldDim strFilter Som strängAnge pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Leverantör")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Område ("M4"). VärdepvFld.CurrentPage = strFilterAvsluta Sub |
Kör makrot för att tillämpa filtret.
För att rensa filtret, skapa följande makro:
12345 | Sub ClearFilter ()Dim pTbl som pivottabellAnge pTbl = ActiveSheet.PivotTables ("PivotTable1")pTbl.ClearAllFiltersAvsluta Sub |
Filtret tas sedan bort.
Vi kan sedan ändra filterkriterierna för att filtrera på en rad i pivottabellen snarare än den aktuella sidan.
Genom att skriva följande makro kan vi sedan filtrera på raden (observera att Pivot -fältet att filtrera på nu är Oper snarare än leverantör).
1234567 | Sub FilterRowValue ()Dim pvFld som PivotFieldDim strFilter Som strängStäll in pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")strFilter = ActiveWorkbook.Sheets ("Sheet1"). Område ("M4"). VärdepvFld.PivotFilters.Add2 xlCaptionEquals,, strFilterAvsluta Sub |
Kör makrot för att tillämpa filtret.
Använda flera kriterier i ett pivotfilter
Vi kan lägga till radvärdefiltret ovan genom att lägga till ytterligare kriterier.
Men eftersom standardfiltret döljer de rader som inte krävs, måste vi gå igenom kriterierna och visa de som krävs, samtidigt som vi döljer de som inte krävs. Detta görs genom att skapa en Array -variabel och använda ett par loopar i koden.
1234567891011121314151617181920212223 | Sub FilterMultipleRowItems ()Dim vArray som variantDim i As Integer, j As IntegerDim pvFld som PivotFieldStäll in pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Oper")vArray = Område ("M4: M5")pvFld.ClearAllFiltersMed pvFldFör i = 1 Till pvFld.PivotItems.Countj = 1Gör medan j <= UBound (vArray, 1) - LBound (vArray, 1) + 1Om pvFld.PivotItems (i) .Name = vArray (j, 1) SedanpvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = TrueAvsluta DoAnnanpvFld.PivotItems (pvFld.PivotItems (i) .Name) .Visible = FalseAvsluta omj = j + 1SlingaNästa iSluta medAvsluta Sub |
Skapa ett filter baserat på en variabel
Vi kan använda samma begrepp för att skapa filter baserade på variabler i vår kod snarare än värdet i en cell. Den här gången fylls filtervariabeln (strFilter) i själva koden (t.ex.: Hard-coded into the macro).
1234567 | Sub FilterTextValue ()Dim pvFld som PivotFieldDim strFilter Som strängAnge pvFld = ActiveSheet.PivotTables ("PivotTable1"). PivotFields ("Leverantör")strFilter = "THOMAS S"pvFld.CurrentPage = strFilterAvsluta Sub |