Como filtrar tabelas dinâmicas usando vba (com exemplos)


Você pode usar os seguintes métodos para filtrar tabelas dinâmicas no Excel usando VBA:

Método 1: Filtre a tabela dinâmica com base em um valor

 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

Esta macro específica filtrará a tabela dinâmica chamada PivotTable1 para mostrar apenas as linhas onde o valor na coluna Posição da tabela dinâmica é igual ao valor na célula J2 de Sheet1 .

Método 2: Filtrar a Tabela Dinâmica com base em vários valores

 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

Esta macro específica filtrará a tabela dinâmica chamada Tabela Dinâmica1 para exibir apenas as linhas onde o valor na coluna Posição da tabela dinâmica é igual a um dos valores no intervalo de células J2:J3 .

Método 3: remover filtros de tabela dinâmica

 SubClearPivotTableFilter ()
   Dim pt As PivotTable
   Set pt = ActiveSheet.PivotTables(" PivotTable1 ")
   pt.ClearAllFilters
End Sub

Esta macro específica limpará todos os filtros da tabela dinâmica chamada PivotTable1 .

Os exemplos a seguir mostram como usar cada um desses métodos na prática.

Exemplo 1: Filtre a tabela dinâmica com base em um valor

Digamos que criamos uma tabela dinâmica a partir de um conjunto de dados no Excel para resumir os pontos marcados por jogadores de basquete de diferentes times e posições:

Digamos que queremos filtrar a tabela dinâmica para mostrar apenas as linhas cujo valor na coluna Posição é Guarda.

Podemos criar a seguinte macro para fazer isso:

 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 executamos esta macro, a tabela dinâmica é automaticamente filtrada para mostrar apenas as linhas cujo valor na coluna Posição é Guarda:

Tabela dinâmica de filtros VBA

A tabela dinâmica foi filtrada para exibir apenas as linhas cujo valor na coluna Posição é Guarda.

Exemplo 2: Filtre uma tabela dinâmica com base em vários valores

Suponha que, em vez disso, desejemos filtrar a tabela dinâmica para mostrar apenas as linhas cujo valor na coluna Posição é Guarda ou Centro.

Podemos criar a seguinte macro para fazer isso:

 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 executamos esta macro, a tabela dinâmica é automaticamente filtrada para mostrar apenas as linhas cujo valor na coluna Posição é Guarda ou Centro:

Tabela dinâmica do filtro VBA com base em vários valores

A tabela dinâmica foi filtrada para mostrar apenas as linhas cujo valor na coluna Posição é Guarda ou Centro.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em VBA:

VBA: como atualizar tabelas dinâmicas
VBA: como remover valores duplicados
VBA: Como contar o número de linhas no intervalo

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *