VBA - Comprueba si existe un valor en una matriz
VBA - Comprueba si existe un valor en una matriz
![](http://img.brin-designs.com/img/games/919/vba-check-if-value-exists-an-array.png)
Introducción
Para verificar si un valor existe en una matriz, podemos recorrer sus elementos. Sin embargo hay otra solución! Puede usar la función INDEX (), nativa de Excel y, en el caso de matrices bidimensionales, use una combinación de la función INDEX / MATCH . Sin embargo, si no se encuentra el valor, Application.Match devuelve un error. Deberá tener en cuenta los posibles errores, así como el número de dimensiones de la variable de matriz.¡Esta pequeña función te ayudará!
Usando la función Match
Función EstDans (mot As String, Tabl) As BooleanDim Dim As Byte, j As Integer
En error reanudar siguiente
Si IsError (UBound (Tabl, 2)) Entonces Dimension = 1 Dimensión Else = 2
En error GoTo 0
Seleccione la dimensión del caso
Caso 1
En error reanudar siguiente
EstDans = Application.Match (mot, Tabl, 0)
En error GoTo 0
Caso 2
Para j = 1 a UBound (Tabl, 2)
En error reanudar siguiente
EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)
En error GoTo 0
Si EstDans = True entonces salga para
Siguiente
Selección final
Función final
Invocando la función
Prueba secundaria ()Dim Tb (), i As Integer
'tb 2 dimensiones:
Tb = Rango ("A2: C16"). Valor
Debug.Print EstDans (MaValeur, Tb)
Borrar tb
'tb 1 dimensión:
ReDim Preserve Tb (15)
Para i = 0 a 14
Tb (i) = Células (i + 2, 1)
Siguiente
Debug.Print EstDans (MaValeur, Tb)
End Sub
Usando un bucle
La estructura de esta función es similar a la que usa Match .Función BoucleSurTabl (mot as String, Tb)Dim Dim As Byte, i As Long, j As Long
En error reanudar siguiente
Si IsError (UBound (Tb, 2)) Entonces Dimension = 1 Dimensión Else = 2
En error GoTo 0
Seleccione la dimensión del caso
Caso 1
Para j = LBound (Tb) a UBound (Tb)
Si Tb (j) = mot Entonces BoucleSurTabl = Verdadero: Función de salida
Siguiente
Caso 2
Para i = LBound (Tb, 1) a UBound (Tb, 1)
Para j = LBound (Tb, 2) a UBound (Tb, 2)
Si Tb (i, j) = mot Entonces BoucleSurTabl = True: salir de la función
Siguiente j
Siguiente yo
Selección final
Función final
Observaciones
Contra todo pronóstico, obtendrá un mejor resultado con la función de bucle en arreglos grandes que utilizando Application.Match.Probando una matriz bidimensional con el siguiente rango ("A1: Y20002").
- Utilizando la función Match: 8.300781 segundos.
- Utilizando el bucle: 0.4375 segundos.
Probando una matriz unidimensional:
- Usando la función Match: instantánea
- Usando el bucle: 0.015625 segundos
Enlace de descarga
- Puede descargar el libro de muestra: //cjoint.com/?DHfpeqMBvRK