Para filtrar uma tabela por VBA usando uma lista de valores de células, transforme o intervalo de critérios em uma matriz (array) e passe essa matriz para o parâmetro Criteria1 do método AutoFilter com Operator:=xlFilterValues, em vez de digitar cada valor manualmente no código.
Você já sabe usar o AutoFiltro do Excel manualmente, marcando as caixinhas de valor que quer ver em uma tabela, mas agora precisa automatizar esse processo com VBA — e o critério de filtro não é um valor fixo digitado no código, e sim uma lista de valores que muda, guardada em um intervalo de células da própria planilha.
Sem saber como conectar o AutoFiltro do VBA a um intervalo dinâmico de critérios, é comum recorrer a soluções mais complicadas, como escrever manualmente cada valor dentro do código ou usar vários filtros individuais em sequência, o que trava a macro toda vez que a lista de critérios muda e exige reescrever o código.
Neste artigo iremos mostrar como usar o método AutoFilter do VBA para filtrar uma tabela usando como critério uma lista de valores vinda diretamente de um intervalo de células, sem precisar digitar cada valor manualmente dentro do código.
Youtube
Assista ao vídeo abaixo, caso prefira aprender a como usar o VBA Autofiltro com uma lista de células assistindo a um vídeo.
Não se esqueça de se INSCREVER no nosso canal.
O método AutoFilter do VBA com um valor fixo
Antes de trabalhar com uma lista de células, vale entender a sintaxe básica do método AutoFilter aplicado a um único critério fixo. Supondo uma tabela de vendas na coluna B com o nome dos vendedores, o código abaixo filtra a tabela para mostrar apenas as linhas de “Ana Souza”:
Sub FiltrarUmValor()
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:="Ana Souza"
End Sub
O parâmetro Field indica qual coluna filtrar, contando a partir da primeira coluna da tabela (nesse caso, a coluna B é a segunda coluna, então Field:=2). O parâmetro Criteria1 recebe o valor exato que deve aparecer na coluna filtrada. O problema desse formato é que ele só aceita um valor fixo digitado diretamente no código — para filtrar por vários valores ao mesmo tempo (como três ou quatro vendedores específicos), é necessário usar uma sintaxe diferente.
Filtrando por múltiplos valores com um array
O AutoFilter do VBA aceita múltiplos critérios simultâneos através do parâmetro Criteria1 recebendo um array (uma lista de valores) em vez de um único texto, combinado com o parâmetro Operator:=xlFilterValues. A sintaxe fica assim:
Sub FiltrarVariosValoresFixos()
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=Array("Ana Souza", "Bruno Lima", "Carla Dias"), Operator:=xlFilterValues
End Sub
Esse código filtra a tabela para mostrar apenas as linhas em que a coluna B contém qualquer um dos três nomes informados no array. O parâmetro Operator:=xlFilterValues é obrigatório sempre que Criteria1 recebe uma lista, avisando ao Excel que se trata de uma seleção de múltiplos valores, e não de uma condição de comparação (como “maior que” ou “contém”).
Transformando uma lista de células em array automaticamente
O objetivo principal deste artigo é substituir aquele array digitado manualmente por uma lista de valores que vem de um intervalo de células, permitindo que qualquer pessoa atualize os critérios de filtro direto na planilha, sem precisar abrir o editor do VBA. Supondo que os nomes que você quer filtrar estejam na coluna D, da célula D2 até D4 da mesma planilha, o código fica assim:
Sub FiltrarComListaDeCelulas()
Dim listaCriterios() As Variant
Dim celula As Range
Dim i As Integer
ReDim listaCriterios(Range("D2:D4").Cells.Count - 1)
i = 0
For Each celula In Range("D2:D4")
listaCriterios(i) = celula.Value
i = i + 1
Next celula
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=listaCriterios, Operator:=xlFilterValues
End Sub
O código percorre cada célula do intervalo D2:D4 com um loop For Each, armazenando cada valor encontrado dentro de um array chamado listaCriterios. Depois de montado, esse array é usado exatamente da mesma forma que o array digitado manualmente no exemplo anterior, dentro do parâmetro Criteria1. A vantagem é que, se você adicionar ou remover valores na lista de células D2:D4, a macro se ajusta automaticamente na próxima execução, sem precisar alterar uma linha de código.
Tornando a lista de critérios dinâmica em tamanho
Um problema do exemplo anterior é que ele assume um intervalo fixo (D2:D4), com exatamente três células. Se a lista de critérios crescer ou diminuir com o tempo, é melhor calcular o tamanho do intervalo automaticamente, usando a última célula preenchida na coluna como referência:
Sub FiltrarComListaDinamica()
Dim listaCriterios() As Variant
Dim celula As Range
Dim intervaloCriterios As Range
Dim i As Integer
Set intervaloCriterios = Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row)
ReDim listaCriterios(intervaloCriterios.Cells.Count - 1)
i = 0
For Each celula In intervaloCriterios
listaCriterios(i) = celula.Value
i = i + 1
Next celula
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=listaCriterios, Operator:=xlFilterValues
End Sub
A linha Cells(Rows.Count, "D").End(xlUp).Row localiza automaticamente a última linha preenchida na coluna D, subindo a partir do final da planilha, exatamente como aconteceria se você pressionasse Ctrl+Seta para Cima estando na última célula da coluna. Assim, o intervalo intervaloCriterios sempre corresponde exatamente à quantidade real de critérios preenchidos, seja ela de duas linhas ou de duzentas.
Removendo o filtro pelo VBA
Para limpar o filtro aplicado e voltar a mostrar todas as linhas da tabela, use o método ShowAllData, dentro de um tratamento de erro simples, já que ele gera erro se não houver nenhum filtro ativo no momento:
Sub LimparFiltro()
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
End Sub
O On Error Resume Next antes do comando evita que a macro pare com uma mensagem de erro caso a planilha já esteja sem nenhum filtro ativo no momento em que a macro é executada.
✅ Use Operator:=xlFilterValues sempre que Criteria1 receber uma lista de valores, em vez de um único critério.
❌ Não deixe o intervalo de critérios fixo no código se a lista de valores muda com frequência — calcule a última linha automaticamente com End(xlUp).
Disponibilidade em outras versões
O método AutoFilter do VBA funciona em todas as versões do Excel para Windows com suporte a macros: Excel 2010, 2013, 2016, 2019 e 365. O Excel para Mac também suporta VBA e o método AutoFilter, com a mesma sintaxe. O Excel Online e o Google Sheets não executam código VBA, então essa automação específica exige a versão desktop do Excel.
Perguntas frequentes
Como filtrar uma tabela no VBA usando vários valores ao mesmo tempo?
Use o método AutoFilter com o parâmetro Criteria1 recebendo um array de valores e o parâmetro Operator:=xlFilterValues, assim: Range("A1").AutoFilter Field:=2, Criteria1:=Array("valor1", "valor2"), Operator:=xlFilterValues.
Como transformar uma lista de células em um array para usar no AutoFilter?
Percorra o intervalo de células com um loop For Each, armazenando cada valor dentro de um array Variant redimensionado com ReDim de acordo com a quantidade de células do intervalo. Depois, use esse array diretamente no parâmetro Criteria1 do AutoFilter.
Como remover o filtro aplicado por uma macro em VBA?
Use o método ShowAllData da planilha ativa, como em ActiveSheet.ShowAllData, dentro de um bloco com On Error Resume Next para evitar erro caso não haja nenhum filtro ativo no momento da execução.
Compartilhe ou Comente
Se você curtiu esse artigo aonde mostramos como usar o AutoFiltro do VBA com uma lista de células, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.
Você já tentou automatizar um filtro no VBA antes e travou na hora de usar múltiplos critérios? Sua lista de critérios costuma vir de uma planilha auxiliar como no exemplo? Conta para nós nos comentários!