Come filtrare le tabelle pivot utilizzando vba (con esempi)
È possibile utilizzare i seguenti metodi per filtrare le tabelle pivot in Excel utilizzando VBA:
Metodo 1: filtra la tabella pivot in base a un valore
SubFilterPivotTable ()
Dim pf As PivotField
Dim myFilter As String
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
myFilter = ActiveWorkbook.Sheets(" Sheet1 ").Range(" J2 ").Value
pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub
Questa particolare macro filtrerà la tabella pivot denominata Tabella Pivot1 per mostrare solo quelle righe in cui il valore nella colonna Posizione della tabella pivot è uguale al valore nella cella J2 di Foglio1 .
Metodo 2: filtra la tabella pivot in base a più valori
Sub FilterPivotTableMultiple()
Dim v Ace Variant
Dim i As Integer, j As Integer
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
'specify range with values to filter on
v = Range(" J2:J3 ")
'clear existing filters
pf.ClearAllFilters
'apply filter to pivot table
With pf
For i = 1 TB pf.PivotItems.Count
j = 1
Do While j <= UBound(v, 1) - LBound(v, 1) + 1
If pf.PivotItems(i).Name = v(j, 1) Then
pf.PivotItems(pf.PivotItems(i).Name).Visible = True
Exit Do
Else
pf.PivotItems(pf.PivotItems(i).Name).Visible = False
End If
j = j + 1
Loop
Next i
End With
End Sub
Questa particolare macro filtrerà la tabella pivot denominata Tabella pivot1 per visualizzare solo quelle righe in cui il valore nella colonna Posizione della tabella pivot è uguale a uno dei valori nell’intervallo di celle J2:J3 .
Metodo 3: rimuovere i filtri della tabella pivot
SubClearPivotTableFilter ()
Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables(" PivotTable1 ")
pt.ClearAllFilters
End Sub
Questa particolare macro cancellerà tutti i filtri dalla tabella pivot denominata PivotTable1 .
Gli esempi seguenti mostrano come utilizzare nella pratica ciascuno di questi metodi.
Esempio 1: filtra la tabella pivot in base a un valore
Diciamo che abbiamo creato una tabella pivot da un set di dati in Excel per riassumere i punti segnati dai giocatori di basket di diverse squadre e posizioni:
Diciamo che vogliamo filtrare la tabella pivot per mostrare solo le righe il cui valore nella colonna Posizione è Guard.
Per fare ciò possiamo creare la seguente macro:
SubFilterPivotTable ()
Dim pf As PivotField
Dim myFilter As String
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
myFilter = ActiveWorkbook.Sheets(" Sheet1 ").Range(" J2 ").Value
pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub
Quando eseguiamo questa macro, la tabella pivot viene automaticamente filtrata per mostrare solo le righe il cui valore nella colonna Posizione è Guard:
La tabella pivot è stata filtrata per visualizzare solo le righe il cui valore nella colonna Posizione è Guard.
Esempio 2: filtrare una tabella pivot in base a più valori
Supponiamo invece di voler filtrare la tabella pivot per mostrare solo le righe il cui valore nella colonna Posizione è Guard o Center.
Per fare ciò possiamo creare la seguente macro:
Sub FilterPivotTableMultiple()
Dim v Ace Variant
Dim i As Integer, j As Integer
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
'specify range with values to filter on
v = Range(" J2:J3 ")
'clear existing filters
pf.ClearAllFilters
'apply filter to pivot table
With pf
For i = 1 TB pf.PivotItems.Count
j = 1
Do While j <= UBound(v, 1) - LBound(v, 1) + 1
If pf.PivotItems(i).Name = v(j, 1) Then
pf.PivotItems(pf.PivotItems(i).Name).Visible = True
Exit Do
Else
pf.PivotItems(pf.PivotItems(i).Name).Visible = False
End If
j = j + 1
Loop
Next i
End With
End Sub
Quando eseguiamo questa macro, la tabella pivot viene automaticamente filtrata per mostrare solo le righe il cui valore nella colonna Posizione è Guard o Center:
La tabella pivot è stata filtrata per mostrare solo le righe il cui valore nella colonna Posizione è Guardia o Centro.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in VBA:
VBA: come aggiornare le tabelle pivot
VBA: come rimuovere valori duplicati
VBA: come contare il numero di righe nell’intervallo