VBA - Comprueba si existe un valor en una matriz

VBA - Comprueba si existe un valor en una matriz

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 Boolean

Dim 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
Artículo Anterior Artículo Siguiente

Los Mejores Consejos