Vlookup - Résultats multiples avec VBA - Exemples de code VBA

Texte de recherche virtuelle

La fonction Vlookup standard peut être utilisée pour rechercher une valeur dans une table :

Et nous utiliserions RECHERCHEV comme ceci :

=RECHERCHEV(A1:10,"Chien",2,FAUX)

pour donner la valeur 30.

Cependant, dans cette liste, nous voyons que Dog se produit 3 fois. La fonction RECHERCHEV standard ne renverra que la valeur associée au premier élément de cette liste. Il ne renverra pas les 125 ou 9 250 avec la 2e ou la 3e instance de "chien" dans cette liste.

Recherche de résultats multiples

La fonction suivante nous permet de spécifier une plage, une expression à rechercher et l'instance (numéro de résultat) puis de retourner la valeur correspondante :

Fonction Find_nth_Occurrence(Column_Range As Range, Expression As String, Occ As Integer) As Double Dim Cell Dim Occurrences_to_date As Integer Find_nth_Occurrence = 1000000 Occurrences_to_date = 0 Pour chaque cellule dans Column_Range If Cell.Value = Expression Then + Occurrences_to_Occurrence_to_date = 0 Then Find_nth_Occurrence = Cell.Offset(0, 1).Value End If End If Next Cell End Function

La principale différence entre cette fonction et la fonction RECHERCHEV standard est que dans ce cas, la plage est la seule plage d'étiquettes - pas la plage de données entière.
Ce qui suit est une sous-routine qui appelle cette fonction en fonction de l'événement click d'un bouton de commande. Il recherche dans la plage A1:A8 sur Sheet2, la 3ème instance du mot Dog :

Private Sub CommandButton1_Click() Dim Answer As Double Answer = Find_nth_Occurrence(Sheets("Sheet2").Range("A1:A8"), "Chien", 3) MsgBox AnswerEnd Sub

La variable « Réponse » stocke le résultat de la fonction - qui est ensuite affiché dans une Msgbox à l'écran :

>Cependant, si le mot ne peut pas être trouvé dans la liste ou si la fréquence n'apparaît pas, par exemple s'il n'y a pas une 5ème instance du mot "Chien", alors la valeur de 1 000 000 est renvoyée :-
Réponse = Find_nth_Occurrence(Sheets("Sheet2").Range("A1:A8"), "Chien", 5)
Ou
Réponse = Find_nth_Occurrence(Sheets("Sheet2").Range("A1:A8"), "Cheval", 2)

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave