VBA Función Filter – Arrays
In this Article
La función Filter (Filtro) de VBA le permite filtrar rápidamente las matrices. Hay varias opciones a considerar cuando se filtran matrices. Los discutiremos a continuación.
Filter – Match (Filtro – Coincidencia)
Por defecto, la función de filtro de VBA filtrará una matriz en busca de coincidencias. En el ejemplo de abajo filtraremos el arreglo por coincidencias con «Smith».
Sub Filter_Match()
'Definir la matriz
Dim strNames As Variant
strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")
'Filtrar la matriz
Dim strSubNames As Variant
strSubNames = Filter(strNames, "Smith")
'Contar la matriz filtrada
MsgBox "Encontrado(s) " & UBound(strSubNames) - LBound(strSubNames) + 1 & " nombre(s)."
End Sub
Un par de puntos importantes:
- La variable del array filtrado debe declararse como variante para evitar definir el tamaño del array.
- Por defecto, la función Filter distingue entre mayúsculas y minúsculas. Por lo que filtrar sobre «smith» daría un resultado diferente al de «Smith». A continuación le mostraremos cómo cambiar esta configuración.
Filter – Case Insensitive (Filtro – Sensible a Mayúsculas y Minúsculas)
Por defecto, VBA distingue entre mayúsculas y minúsculas. Esto significa que para que el texto coincida, los casos deben ser iguales (por ejemplo, «smith» no es igual a «Smith»). Esto se aplica a la función de filtro, así como a todas (¿la mayoría?) las demás funciones o comparaciones de VBA.
Personalmente, nunca quiero que VBA distinga entre mayúsculas y minúsculas, por lo que siempre añado «Option Compare Text» al principio de todos mis módulos de código. «Option Compare Text» le dice a VBA que ignore las mayúsculas y minúsculas para que sea Insensible a las Mayúsculas y Minúsculas:
Option Compare Text
Agregar «Option Compare Text» al principio de su módulo hará que la Función de Filtrado no distinga entre mayúsculas y minúsculas. Alternativamente, puede decirle a la Función de Filtrado misma que no distinga entre mayúsculas y minúsculas con el argumento vbTextCompare:
strSubNames = Filter(strNames, "smith", , vbTextCompare)
Ejemplo completo:
Sub Filtro_MatchCase()
'Definir la matriz
Dim strNames As Variant
strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")
'Filtrar la matriz
Dim strSubNames As Variant
strSubNames = Filter(strNames, "smith", , vbTextCompare)
'Contar la matriz filtrada
MsgBox "Encontrado(s) " & UBound(strSubNames) - LBound(strSubNames) + 1 & " nombre(s)."
End Sub
Filter – Does Not Match (Filtro – No Coincide)
La función de filtro también puede utilizarse para identificar los elementos de la matriz que NO coinciden con los criterios introducidos, estableciendo el argumento Incluir en FALSE:
strSubNames = Filter(strNames, "Smith", False)
Ejemplo completo:
Sub Filtro_NoMatch()
'Definir la matriz
Dim strNames As Variant
strNames = Array("Steve Smith", "Shannon Smith", "Ryan Johnson")
'Filtrar la matriz
Dim strSubNames As Variant
strSubNames = Filter(strNames, "Smith", False)
'Contar la matriz filtrada
MsgBox "Encontrado(s) " & UBound(strSubNames) - LBound(strSubNames) + 1 & " nombre(s)."
End Sub
Filter Function (Función de Filtro)
La función VBA Filter devuelve un subconjunto de un array de cadenas suministrado.
La sintaxis de la función de filtro es:
Filter( SourceArray, Match, [Include], [Compare] )
Los argumentos de la función son:
- SourceArray – La matriz original a filtrar
- Match – La cadena a buscar
- [Include ] – OPCIONAL TRUE (Devuelve las coincidencias), FALSE (Devuelve los elementos que no coinciden)
- [Comparar ] – OPCIONAL vbBinaryCompare – comparación binaria, vbTextCompare – comparación de texto, vbDatabaseCompare – comparación de bases de datos