VBA - Vérifier si une valeur existe dans un tableau

VBA - Vérifier si une valeur existe dans un tableau

introduction

Pour vérifier si une valeur existe dans un tableau, nous pouvons parcourir ses éléments. Cependant, il existe une autre solution! Vous pouvez utiliser la fonction INDEX (), native d’Excel, et dans le cas de tableaux à deux dimensions, utiliser une combinaison de la fonction INDEX / MATCH . Toutefois, si la valeur est introuvable, Application.Match renvoie une erreur. Vous devrez prendre en compte les erreurs éventuelles, ainsi que le nombre de dimensions de la variable tableau.

Cette petite fonction vous aidera!

Utiliser la fonction Match

 Fonction EstDans (mot As String, Tabl) As Boolean

Dim Dimension As Byte, j As Integer

Sur erreur Reprendre suivant

Si IsError (UBound (Tabl, 2)) Alors Dimension = 1 Sinon Dimension = 2

Sur erreur GoTo 0

Sélectionner une dimension de cas

Cas 1

Sur erreur Reprendre suivant

EstDans = Application.Match (mot, Tabl, 0)

Sur erreur GoTo 0

Cas 2

Pour j = 1 To UBound (Tabl, 2)

Sur erreur Reprendre suivant

EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)

Sur erreur GoTo 0

Si EstDans = True, puis quitter pour

Suivant

Fin Sélectionnez

Fonction de fin

Invoquer la fonction

 Sous test ()

Dim Tb (), i comme un entier

'tb 2 dimensions:

Tb = Plage ("A2: C16"). Valeur

Debug.Print EstDans (MaValeur, Tb)

Effacer Tb

'tb 1 dimension:

ReDim Conserver Tb (15)

Pour i = 0 à 14

Tb (i) = cellules (i + 2, 1)

Suivant

Debug.Print EstDans (MaValeur, Tb)

End Sub

En utilisant une boucle

La structure de cette fonction est similaire à celle utilisant Match .

 Fonction BoucleSurTabl (mot As String, Tb)

Dim Dimension As Byte, i en tant que long, j en tant que long

Sur erreur Reprendre suivant

Si IsError (UBound (Tb, 2)) Alors Dimension = 1 Sinon Dimension = 2

Sur erreur GoTo 0

Sélectionner une dimension de cas

Cas 1

Pour j = LBound (Tb) à UBound (Tb)

Si Tb (j) = mot Alors BoucleSurTabl = True: Fonction de sortie

Suivant

Cas 2

Pour i = LBound (Tb, 1) à UBound (Tb, 1)

Pour j = LBound (Tb, 2) à UBound (Tb, 2)

Si Tb (i, j) = mot Alors BoucleSurTabl = True: Fonction de sortie

Suivant j

Ensuite je

Fin Sélectionnez

Fonction de fin

Observations

Contre toute attente, vous obtiendrez un meilleur résultat avec la fonction de boucle sur les grands tableaux qu'avec Application.Match.

Test d'un tableau à 2 dimensions avec la plage suivante ("A1: Y20002").

  • Utilisation de la fonction Match: 8.300781 secondes.
  • Utilisation de la boucle: 0, 4375 seconde.

Test d'un tableau à une dimension:

  • Utilisation de la fonction Match: instant
  • Utilisation de la boucle: 0.015625 secondes

Lien de téléchargement

  • Vous pouvez télécharger l'exemple de classeur: //cjoint.com/?DHfpeqMBvRK
Article Précédent Article Suivant

Les Meilleurs Conseils