Vérifier si une valeur est dans un tableau ou pas avec Excel VBA
J'ai un peu de code ci-dessous, qui est censé être de vérifier si une valeur est dans un Tableau ou pas.
Sub test()
vars1 = Array("Examples")
vars2 = Array("Example")
If IsInArray(Range("A1").Value, vars1) Then
x = 1
End If
If IsInArray(Range("A1").Value, vars2) Then
x = 1
End If
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Si la cellule A1
contient le mot Examples
pour une raison à la fois de la IsInArray
le détecte comme existant pour les deux Tableaux quand il le faut seulement trouver existants dans le vars1
tableau
Que dois-je modifier pour que mon IsInArray
de la fonction pour en faire une correspondance exacte?
aye, j'ai vu qu'il avait disparu après que j'ai frappé entrer. Figuré comme beaucoup
Tu veux dire que la fonction IsInArray détecte lorsque la cellule A1 contient "Exemple"?
Tu veux dire que la fonction IsInArray détecte lorsque la cellule A1 contient "Exemple"?
OriginalL'auteur Ryflex | 2016-07-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez la force brute comme ceci:
Utiliser comme
IsInArray
fonction dans mon code d'origine pour utiliserIsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0))
à la place?Quelle est la taille de votre tableau? Est-ce plus lisible que les autres méthodes? C'est peut-être la préférence car une itération sur un tableau est assez rapide, et (bien que je ne peux pas dire pour sûr) la fonction de Match est sûrement pour faire cela.
Je suis en cours d'exécution 10~ tableaux via
IsInArray
, au total tous d'entre eux ajoutée vient jusqu'à 501 éléments de tableau pour le moment. Il finira par devenir plus grand/plus d'entre eux.Ceux sont des petits nombres. Je ne suis pas sûr que vous auriez du voir beaucoup de différence de toute façon. Une troisième option est la
Dictionary
objet. Il a uneExists
méthode et est plus facile à travailler que les tableaux (pas deReDim Preserve
lors de l'ajout d'éléments)c'est peut-être un peu en retard, mais je tenais à préciser que l'utilisation de la
Match()
fonction est en fait beaucoup plus lentement que seulement une itération (en boucle) dans le tableau. J'ai fait un test avec un tableau de taille 2000. Le pire scénario pour une boucle dans le tableau serait à la recherche pour le dernier item (index 2000). Après 5000 appels à la fois à l'Match()
de la fonction et de la boucle, le temps total pourMatch()
était3.746094
mais seulement1.667969
pour une boucle dans le tableau. Cochez la réponse à cette question pour le code que j'ai utilisé lors de mes testsOriginalL'auteur Brad
Cette Question a été posée ici: VBA Tableaux - Vérifier stricte (pas approximatives) match
ce n'est pas une boucle dans un tableau
OriginalL'auteur
Utiliser la fonction Match() en VBA excel pour vérifier si la valeur existe dans un tableau.
IsInArray
fonction à utiliserIsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0))
ce qui résout le problèmePas IsError() et IsNumeric() à la fois des résultats même réponse lorsqu'il est utilisé avec fonction Match ():)
OriginalL'auteur Sixthsense
Alors que c'est essentiellement juste @Brad réponse encore une fois, j'ai pensé qu'il pourrait être intéressant dont un légèrement modifiée de la fonction qui renvoie l'index de l'élément que vous recherchez s'il existe dans le tableau. Si l'élément n'est pas dans le tableau, il retourne
-1
à la place.La sortie de ce qui peut être vérifié tout comme la "chaîne" de la fonction,
If InStr(...) > 0 Then
, j'ai donc fait un petit test de la fonction ci-dessous comme exemple.Puis je suis allé un peu trop loin et étoffé pour deux dimensions des tableaux parce que quand vous générer un tableau basé sur une gamme c'est généralement sous cette forme.
Il renvoie à une dimension unique de la variante de tableau avec seulement deux valeurs, les deux indices de la matrice utilisée comme une entrée (en supposant que la valeur est trouvée). Si la valeur n'est pas trouvée, elle retourne un tableau de
(-1, -1)
.Voici une photo des données que j'ai mis en place pour le test, suivi par le test:
OriginalL'auteur Marcucciboy2
Vous voulez vérifier si Exemples existe dans Range("A1").De valeur que Si elle échoue, alors pour vérifier Exemple droit? Je pense que mycode va fonctionner parfaitement. Veuillez vérifier.
End Sub
Examples
existe dans A1 et je ne peux pas utiliser des chaînes de caractères comme vous êtes en utilisant, j'ai un tableau pour mon code, sinon je l'aurais ordinaryly utiliséInStr
OriginalL'auteur Sumantha Poojary