o Função de filtro VBA permite que você filtre arrays rapidamente. Existem várias configurações a serem consideradas ao filtrar matrizes. Vamos discuti-los abaixo.
Filtro - Combinar
Por padrão, a função de filtro VBA filtrará uma matriz para correspondências. No exemplo abaixo, filtraremos a matriz para correspondências com “Smith”.
1234567891011121314 | Sub Filter_Match ()'Definir MatrizDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames como variantestrSubNames = Filtro (strNames, "Smith")'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nomes."End Sub |
Alguns pontos importantes:
- A variável da matriz filtrada deve ser declarada como variante do tipo de dados para evitar a definição do tamanho da matriz.
- Por padrão, a função Filtro diferencia maiúsculas de minúsculas. Portanto, filtrar por “ferreiro” daria um resultado diferente de “Silva”. Abaixo, mostraremos como alterar essa configuração.
Filtro - não diferencia maiúsculas de minúsculas
Por padrão, o VBA diferencia maiúsculas de minúsculas. Isso significa que “ferreiro” não é igual a “Smith”. Isso é verdade para a Função de Filtro, bem como para todas (a maioria?) Outras funções ou comparações do VBA.
Pessoalmente, nunca quero que o VBA faça distinção entre maiúsculas e minúsculas, então sempre adiciono a opção Option Compare Text no topo de todos os meus módulos de código. Texto de comparação de opção diz ao VBA para ignorar maiúsculas e minúsculas para não diferenciar maiúsculas de minúsculas:
1 | Texto de comparação de opções |
Adicionar texto de comparação de opções à parte superior do módulo tornará a função de filtro insensível a maiúsculas e minúsculas. Como alternativa, você pode dizer à própria Função de Filtro para não diferenciar maiúsculas de minúsculas com o argumento vbTextCompare:
1 | strSubNames = Filter (strNames, "smith",, vbTextCompare) |
Exemplo completo:
1234567891011121314 | Sub Filter_MatchCase ()'Definir MatrizDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames como variantestrSubNames = Filter (strNames, "smith",, vbTextCompare)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nomes."End Sub |
Filtro - Não Corresponde
A função de filtro também pode ser usada para identificar itens da matriz que NÃO corresponder aos critérios inseridos definindo o argumento Incluir como FALSO:
1 | strSubNames = Filtro (strNames, "Smith", False) |
Exemplo completo:
1234567891011121314 | Sub Filter_NoMatch ()'Definir MatrizDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Filter ArrayDim strSubNames como variantestrSubNames = Filtro (strNames, "Smith", False)'Count Filtered ArrayMsgBox "Found" & UBound (strSubNames) - LBound (strSubNames) + 1 & "nomes."End Sub |
Função de Filtro
A função Filtro VBA retorna um subconjunto Array de uma matriz de string fornecida.
A sintaxe da função de filtro é:
Filtro (SourceArray, Match, [Incluir], [Comparar])
Os argumentos da função são:
- SourceArray - A matriz original para filtrar
- Corresponder - A string a ser pesquisada
- [Incluir] - OPCIONAL TRUE (Retorna correspondências), FALSE (Retorna elementos que não correspondem)
- [Comparar] - OPCIONAL vbBinaryCompare - comparação binária, vbTextCompare - comparação de texto, vbDatabaseCompare - comparação de banco de dados