VBA Rechercher (trouver) la valeur dans le tableau

Ce tutoriel montrera comment rechercher (trouver) une valeur dans un tableau en VBA

Il existe plusieurs façons de rechercher une chaîne dans un tableau, selon que le tableau est unidimensionnel ou multidimensionnel.

Recherche dans un tableau unidimensionnel

Pour rechercher une valeur dans un tableau à une dimension, vous pouvez utiliser la fonction de filtre.

123 Dim z comme variante'filtre le tableau d'originez = Filtre (Tableau, Chaîne, Vrai, vbCompareBinary)

La syntaxe de l'option Filtre est la suivante

Filtre (Tableau source, Correspondance en tant que chaîne, [Inclure en tant que booléen], [Comparer en tant que vbCompareMethod])

Les Tableau source et le Faire correspondre en tant que chaîne sont nécessaires pendant que le Inclure comme booléen et le Comparer en tant que vbCompareMethod sont facultatifs. S'ils ne sont pas inclus, ils sont définis sur Vrai et vbComparerBinaire respectivement.

Trouver les valeurs qui correspondent au filtre

1234567891011121314 Sous FindBob()'Créer un tableauDim strName() en tant que variantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'déclarer une variante pour stocker les données du filtre dansDim strSubNames comme variante'filtre le tableau d'originestrSubNames = Filter(strName, "Bob")'si votre valeur LBound est supérieure à -1, alors la valeur a été trouvéeIf LBound(strSubNames ) > -1 Then MsgBox ("J'ai trouvé Bob")Fin du sous-marin

Le deuxième tableau contiendra les valeurs trouvées par le filtre. Si vos valeurs LBound et UBound ne sont pas -1, le tableau a réussi à trouver la valeur que vous recherchiez.

Vous pouvez également voir combien de fois le texte apparaît dans le tableau d'origine.

1234567891011121314 Noms de sous-compte()'Créer un tableauDim strName() en tant que variantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'déclare un tableau pour stocker les données du filtre dansDim strSubNames comme variante'filtre le tableau d'originestrSubNames = Filter(strName, "Bob")'si vous soustrayez le LBound des valeurs UBound et ajoutez 1, nous obtiendrons le nombre de fois où le texte apparaîtMsgbox UBound(strSubNames) - LBound(strSubNames) + 1 & " noms trouvés."Fin du sous-marin

Trouver des valeurs qui NE correspondent PAS au filtre

Les [Inclure comme booléen] L'option vous permet de trouver combien de valeurs dans votre tableau NE PAS correspond à votre filtre

1234567891011121314 Sub CountExtraNames()'créer un tableauDim strName() en tant que variantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'déclare un tableau pour stocker les données du filtre dansDim strSubNames comme variante'filtre le tableau d'originestrSubNames = Filter(strName, "Bob", False)'si vous soustrayez le LBound des valeurs UBound et ajoutez 1, nous obtiendrons le nombre de fois où le texte apparaîtMsgbox UBound(strSubNames ) - LBound(strSubNames ) + 1 & " noms trouvés."Fin du sous-marin

nous avons donc modifié cette ligne :

1 strSubNames = Filter(strName, "Bob")

avec cette ligne :

1 strSubNames = Filter(strName, "Bob", False)

L'utilisation de cette ligne dans le code renverrait tous les noms qui ne correspondent PAS à « Bob ».

Filtres sensibles à la casse

Vous constaterez que le filtre est sensible à la casse par défaut. Ceci est vrai pour toutes les fonctions VBA. Si vous souhaitez rechercher du texte qui ne respecte pas la casse, vous devez modifier légèrement votre code.

1 z = Filtre(strName, "bob",, vbTextCompare)

Ajouter vbTextComparer à votre ligne de filtre permettra à votre code de trouver « bob » ou « Bob ». Si cela est omis, VBA utilise par défaut vbBinaryComparer qui recherchera uniquement les données qui sont un EXACT rencontre. Remarquez que dans l'exemple ci-dessus, nous avons omis le [Inclure comme booléen] argument donc True est supposé.

Option Comparer le texte

Alternativement, vous pouvez ajouter le texte Option Comparer le texte en haut de votre module - cela rendra toutes les fonctions que vous écrivez dans ce module particulier insensibles à la casse.

Utiliser une boucle pour rechercher dans un tableau

L'utilisation d'une boucle est un peu plus compliquée que l'utilisation de la fonction Filter. Nous pouvons créer une fonction qui parcourra toutes les valeurs du tableau.

1234567891011121314151617 Sous LoopThroughArray()'créer un tableauDim strName() en tant que variantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")Dim strFind as stringstrFind = "Bob"Dim j'aussi longtemps'boucle dans le tableauPour i = LBound(strName, 1) À UBound(strName, 1)Si InStr(strName(i), strFind) > 0 AlorsMsgBox "Bob a été trouvé !"Quitter pourFin siEnsuite jeFin du sous-marin

Afin de trouver une partie de la chaîne de texte, c'est-à-dire "Bob" au lieu de "Bob Smith" ou "Bob Williams", nous devions utiliser la fonction Instr dans l'instruction If. Cela a regardé dans la chaîne renvoyée par la boucle du tableau pour voir si "Bob" était dans la chaîne, et comme c'était dans la chaîne, il renverrait une boîte de message, puis Quitter la boucle.

Recherche dans un tableau multidimensionnel

Nous utilisons également la boucle pour rechercher dans un tableau multidimensionnel. Encore une fois, nous devons créer une fonction qui nous permet de parcourir toutes les valeurs du tableau, mais cette fois, nous devons également parcourir chaque dimension du tableau.

123456789101112131415161718192021222324252627 Fonction LoopThroughArray()Dim varArray() en tant que varianteDim strFind As StringstrFind = "Docteur"'déclare la taille du tableauReDim varArray(1, 2)'initialise le tableauvarArray(0, 0) = "Mel Smith"varArray(0, 1) = "Fred Buckle"varArray(0, 2) = "Jane Eyre"varArray(1, 0) = "Comptable"varArray(1, 1) = "Secrétaire"varArray(1, 2) = "Docteur"'déclarer les variables pour la boucleDim i aussi long, j aussi long'boucle pour la première dimensionPour i = LBound(varArray, 1) À UBound(varArray, 1)'boucle pour la deuxième dimensionPour j = LBound(varArray, 2) À UBound(varArray, 2)'si nous trouvons la valeur, alors msgbox pour dire que nous avons la valeur et quitter la fonctionSi varArray(i, j) = strFind AlorsMsgBox "Le docteur a été trouvé !"Fonction de sortieFin sij suivantEnsuite jeFonction de fin
wave wave wave wave wave