Note: The other languages of the website are Google-translated. Back to English

Comment vlookup et renvoyer plusieurs valeurs sans doublons dans Excel? 

Parfois, vous souhaiterez peut-être rechercher et renvoyer plusieurs valeurs correspondantes dans une seule cellule à la fois. Mais, s'il y a des valeurs répétées remplies dans les cellules renvoyées, comment pouvez-vous ignorer les doublons et ne conserver que les valeurs uniques lors du renvoi de toutes les valeurs correspondantes comme illustré ci-dessous dans Excel?

doc renvoie plusieurs valeurs uniques 1

Vlookup et renvoyer plusieurs valeurs correspondantes sans doublons à l'aide de la fonction définie par l'utilisateur


Vlookup et renvoyer plusieurs valeurs correspondantes sans doublons à l'aide de la fonction définie par l'utilisateur

Le code VBA suivant peut vous aider à renvoyer plusieurs valeurs correspondantes sans doublons, procédez comme suit:

1. Maintenez le Alt + F11 clés pour ouvrir le Microsoft Visual Basic pour applications fenêtre.

2Cliquez sur insérer > Moduleet collez le code suivant dans le Module Fenêtre.

Code VBA: Vlookup et retourne plusieurs valeurs correspondantes uniques:

Function MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
    Dim xDic As New Dictionary
    Dim xRows As Long
    Dim xStr As String
    Dim i As Long
    On Error Resume Next
    xRows = LookupRange.Rows.Count
    For i = 1 To xRows
        If LookupRange.Columns(1).Cells(i).Value = Lookupvalue Then
            xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
        End If
    Next
    xStr = ""
    MultipleLookupNoRept = xStr
    If xDic.Count > 0 Then
        For i = 0 To xDic.Count - 1
            xStr = xStr & xDic.Keys(i) & ","
        Next
        MultipleLookupNoRept = Left(xStr, Len(xStr) - 1)
    End If
End Function

3. Après avoir inséré le code, cliquez sur Outils > Références en plein air Microsoft Visual Basic pour applications fenêtre, puis, dans le sauté Références - VBAProject boîte de dialogue, cochez Exécution de scripts Microsoft option dans la Références disponibles zone de liste, voir capture d'écran:

doc renvoie plusieurs valeurs uniques 2

4. Puis clique OK pour fermer la boîte de dialogue, enregistrez et fermez la fenêtre de code, revenez à la feuille de calcul et entrez cette formule: =MultipleLookupNoRept(E2,A2:C17,3) dans une cellule vide où vous souhaitez afficher le résultat, appuyez sur Entrer clé pour obtenir le résultat correct selon vos besoins. Voir la capture d'écran:

doc renvoie plusieurs valeurs uniques 3

Notes: Dans la formule ci-dessus, E2 est le critère que vous souhaitez consulter, A2: C17 est la plage de données que vous souhaitez utiliser, le nombre 3 est le numéro de colonne contenant les valeurs renvoyées.


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (13)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
et si je voulais créer une liste dans un tableau à partir de cela au lieu de tous les résultats dans une seule cellule ?
Ce commentaire a été minimisé par le modérateur sur le site
Allô Tom,
Si vous souhaitez extraire les valeurs uniques d'une liste de cellules au lieu d'une cellule, la formule suivante peut vous aider :

=LOOKUP(2, 1/((COUNTIF($E$1:E1, $B$2:$B$12)=0)*($D$2=$A$2:$A$12)), $B$2:$B$12)

Essayez-le.
Ce commentaire a été minimisé par le modérateur sur le site
Salut Skyyang,

Merci beaucoup pour cette formule.
Cela fonctionne pour moi. Cependant, le traitement d'un grand nombre de données prend beaucoup de temps.
Pouvons-nous modifier cette formule pour travailler un peu plus vite ?
Merci encore
Rasike
Ce commentaire a été minimisé par le modérateur sur le site
Salut skyyang et si vous voulez le résultat sous forme de colonne?
Ce commentaire a été minimisé par le modérateur sur le site
Existe-t-il un moyen d'ajouter un espace entre les multiples valeurs récupérées dans les résultats sans introduire de virgule à la fin de la liste ? Par exemple, votre résultat ci-dessus s'afficherait comme : "Emily, James, Daisy, Gary" au lieu de ceci : "Emily, James, Daisy, Gary"

J'ai essayé de modifier cette partie du code VBA : xStr = xStr & xDic.Keys(I) & "," pour être ceci : xStr = xStr & xDic.Keys(I) & ", "

Cela a ajouté l'espace entre les valeurs, mais cela a également ajouté une virgule après la dernière valeur. "Emily, James, Daisy, Gary,"

Existe-t-il un moyen de le faire fonctionner avec l'espace mais sans la virgule supplémentaire après la dernière valeur?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, Demetre,
Utilisez l'espace pour séparer les valeurs, il vous suffit de changer le code vba :
de xStr = xStr & xDic.Keys(i) & "," pour être ceci : xStr = xStr & xDic.Keys(i) & " "

Essayez-le.
Ce commentaire a été minimisé par le modérateur sur le site
xStr = xStr & xDic.Keys(I) & "," soit ceci : xStr = xStr & xDic.Keys(I) & ", "

Existe-t-il un moyen de remplacer "," par ALT + ENTRÉE dans la cellule, de sorte que les résultats soient dans la même cellule mais sur des lignes différentes ? Dois-je introduire un module VBA supplémentaire pour cela et les combiner?

De plus, ce code est assez lent lorsqu'il boucle sur d'énormes tables. Quelqu'un connait-il des solutions plus rapides ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Imré,
Pour séparer les valeurs de résultat par les touches Alt + Entrée, veuillez appliquer la fonction définie par l'utilisateur suivante :

Fonction MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
Dim xDic comme nouveau dictionnaire
Dim xRows As Long
Dim xStr As String
Dim i As Long
On Error Resume Next
xRows = LookupRange.Rows.Count
Pour i = 1 Vers xLignes
Si LookupRange.Columns(1).Cells(i).Value = Lookupvalue Alors
xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
Si fin
Suivant
xStr = ""
MultipleLookupNoRept = xStr
Si xDic.Count > 0 Alors
Pour i = 0 Vers xDic.Count - 1
xStr = xStr & xDic.Keys(i) & Chr(10) + Chr(13)
Suivant
MultipleLookupNoRept = Gauche(xStr, Len(xStr) - 1)
Si fin
Debug.Print xStr
Fonction de fin

Et puis suivez les étapes ci-dessus dans cet article, enfin, après avoir entré la formule, vous devez cliquer sur Wrap Text sous l'onglet Accueil.
Ce commentaire a été minimisé par le modérateur sur le site
Hi

Je voulais créer une liste dans un tableau à partir de cela au lieu de tous les résultats dans une cellule. J'ai donc utilisé une formule similaire ci-dessous (ce que vous avez suggéré)

=LOOKUP(2, 1/((COUNTIF($E$1:E1, $B$2:$B$12)=0)*($D$2=$A$2:$A$12)), $B$2:$B$12)

Cependant, cela prend beaucoup de temps à traiter à partir d'un grand ensemble de données.
Existe-t-il une méthode alternative pour traiter cela plus rapidement?
Merci encore
Rasike
Ce commentaire a été minimisé par le modérateur sur le site
salut,
alors que le temps de la valeur du lot multivlooks, ma feuille de calcul s'est bloquée. Existe-t-il d'autres moyens de multivlookupsans répétition ????

et aussi j'ai utilisé sur un nouveau bureau aussi son accrochage seulement ...

ma valeur de données est d'environ 10,000 XNUMX lignes
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'ai fait comme vous l'avez dit et c'est génial mais cela n'a toujours pas résolu l'un de mes problèmes, que se passe-t-il lorsque vous avez une valeur unique chaque mois ? =MultipleLookupNoRept(E2,A2:C17,3) , j'essaie de E2&1 pour janvier mais ça ne marche pas
Ce commentaire a été minimisé par le modérateur sur le site
Salut Jame,
Pourriez-vous donner votre problème sous forme de capture d'écran ici, afin que je puisse comprendre vos besoins ?
Ce commentaire a été minimisé par le modérateur sur le site
C'est bien! Comment pourrais-je adapter cela pour ne pas ajouter de valeurs nulles au dictionnaire? J'ai essayé d'ajouter le gras ci-dessous, mais la chaîne finale revient toujours avec ",", instances.


xRows = LookupRange.Rows.Count
Pour i = 1 Vers xLignes
Si LookupRange.Columns(1).Cells(i).Value = Lookupvalue And Not IsEmpty(LookupRange.Columns(1).Cells(i).Value) Alors
xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
Si fin
Suivant

Merci,
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés