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:

Tabella pivot dei filtri VBA

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:

Tabella pivot del filtro VBA basata su più valori

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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *