VBA – Filtrar matrizes
In this Article
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
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