- Exemplo 1: Filtrar tabela dinâmica com base em um valor
- Exemplo 2: Filtrar tabela dinâmica com base em vários valores
É 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.