É possível utilizar os seguintes métodos para filtrar tabelas dinâmicas no Excel utilizando o VBA:

Método 1: Filtrar a tabela dinâmica com base num valor

 Sub FilterPivotTable() 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 Tabela dinâmica1 para exibir apenas as linhas em que o valor no Posição da tabela pivô é igual ao valor na célula J2 de Folha1 .

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

 Sub FilterPivotTableMultiple() Dim v As Variant Dim i As Integer, j As Integer Dim pf As PivotField Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ") 'especificar intervalo com valores para filtrar em v = Range(" J2:J3 ") 'limpar filtros existentes pf.ClearAllFilters 'aplicar filtro à tabela dinâmica Com pf For i = 1 To 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 em que o valor no Posição da tabela dinâmica é igual a um dos valores no intervalo de células J2:J3 .

Método 3: Limpar filtros da tabela dinâmica

 Sub ClearPivotTableFilter() 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 Tabela dinâmica1 .

Os exemplos seguintes mostram como utilizar cada um destes métodos na prática.

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

Suponhamos que criámos uma tabela dinâmica a partir de um conjunto de dados no Excel para resumir os pontos marcados pelos jogadores de basquetebol em várias equipas e posições:

Suponhamos que gostaríamos de filtrar a tabela dinâmica para mostrar apenas as linhas em que o valor na coluna Posição é Guard.

Para o efeito, podemos criar a seguinte macro:

 Sub FilterPivotTable() 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 em que o valor na coluna Posição é Guard:

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

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

Suponhamos que, em vez disso, gostaríamos de filtrar a tabela dinâmica para mostrar apenas as linhas em que o valor na coluna Posição é Guard ou Centro.

Para o efeito, podemos criar a seguinte macro:

 Sub FilterPivotTableMultiple() Dim v As Variant Dim i As Integer, j As Integer Dim pf As PivotField Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ") 'especificar intervalo com valores para filtrar em v = Range(" J2:J3 ") 'limpar filtros existentes pf.ClearAllFilters 'aplicar filtro à tabela dinâmica Com pf For i = 1 To 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 em que o valor na coluna Posição é Guarda ou Centro:

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