VBA – Filtrar matrizes

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on May 10, 2023

A função Filter do VBA permite que você filtre rapidamente matrizes. Há várias configurações a serem consideradas ao filtrar matrizes. Vamos discuti-las a seguir.

Filtro – Correspondência

Por padrão, a função VBA Filter filtrará uma Array em busca de correspondências. No exemplo abaixo, filtraremos a Array em busca de correspondências com “Smith”.

Sub Usando_Filter_Match()

    'Definir Array
    Dim strNames As Variant
    strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")

    'Filtrar Array
    Dim strSubNames As Variant
    strSubNames = Filter(strNames, "Smith")
    
    'Contar Array Filtrada
    MsgBox "Encontrados " & UBound(strSubNames) - LBound(strSubNames) + 1 & " nomes."

End Sub

Alguns pontos importantes:

  • A variável da matriz filtrada deve ser declarada como tipo de dados Variant para evitar a definição do tamanho da matriz.
  • Por padrão, a função Filter diferencia maiúsculas de minúsculas. Portanto, filtrar em “smith” daria um resultado diferente de “Smith”. A seguir, mostraremos como alterar essa configuração.

Filtro – Não Diferenciar Maiúsculas de Minúsculas

Por padrão, o VBA faz distinção entre maiúsculas e minúsculas. Isso significa que, para que o texto corresponda, os tipos de letra devem ser os mesmos (por exemplo, “smith” não é igual a “Smith”). Isso se aplica à função Filter, bem como a todas (a maioria?) das outras funções ou comparações do VBA.

Pessoalmente, nunca quero que o VBA seja sensível a maiúsculas e minúsculas, por isso sempre adiciono Option Compare Text à parte superior de todos os meus módulos de código. A opção Compare Text diz ao VBA para ignorar as maiúsculas e minúsculas, de modo que ele seja insensível a maiúsculas e minúsculas:

Option Compare Text

Adicionar Option Compare Text à parte superior do módulo tornará a função de filtro insensível a maiúsculas e minúsculas. Como alternativa, você pode instruir a própria função de filtro a não diferenciar maiúsculas de minúsculas com o argumento vbTextCompare:

strSubNames = Filter(strNames, "smith", , vbTextCompare)

Exemplo completo:

Sub Usando_Filtar_MaiusculasMinusculas()

    'Definir a Array
    Dim strNames As Variant
    strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")

    'Filtrar a Array
    Dim strSubNames As Variant
    strSubNames = Filter(strNames, "smith", , vbTextCompare)
    
    'Contar Array filtrada
    MsgBox "Encontrados " & UBound(strSubNames) - LBound(strSubNames) + 1 & " nomes."

End Sub

Filtro – Não corresponde

A função Filter também pode ser usada para identificar itens de matriz que NÃO correspondem aos critérios inseridos, definindo o argumento Include como FALSE:

strSubNames = Filter(strNames, "Smith", False)

Exemplo completo:

Sub Filtrar_NaoCorresponde()

    'Definir Array
    Dim strNames As Variant
    strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")

    'Filtrar a Array
    Dim strSubNames As Variant
    strSubNames = Filter(strNames, "Smith", False)
    
    'Contar Array filtrada
    MsgBox "Encontrados " & UBound(strSubNames) - LBound(strSubNames) + 1 & " nomes."

End Sub

Função Filter

janela filter match

A função Filter do VBA retorna um subconjunto de uma matriz de strings fornecida.

A sintaxe da função Filter é:

Filter( SourceArray, Match, [Include], [Compare] )

Os argumentos da função são:

  • SourceArray – A matriz original a ser filtrada
  • Match – A string a ser pesquisada
  • [Include]OPCIONAL TRUE (Retorna correspondências), FALSE (Retorna elementos que não correspondem)
  • [Compare]OPCIONAL vbBinaryCompare – comparação binária, vbTextCompare – comparação de texto, vbDatabaseCompare – comparação de banco de dados
vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA