Note: The other languages of the website are Google-translated. Back to English
Σύνδεση  \/ 
x
or
x
Εγγραφή  \/ 
x

or

Πώς να vlookup για να επιστρέψετε πολλές τιμές σε ένα κελί στο Excel;

Κανονικά, στο Excel, όταν χρησιμοποιείτε τη συνάρτηση VLOOKUP, εάν υπάρχουν πολλές τιμές που ταιριάζουν με τα κριτήρια, μπορείτε να πάρετε την πρώτη. Αλλά, μερικές φορές, θέλετε να επιστρέψετε όλες τις αντίστοιχες τιμές που πληρούν τα κριτήρια σε ένα κελί, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης, πώς μπορείτε να το λύσετε;

Vlookup για επιστροφή πολλαπλών τιμών σε ένα κελί με τη συνάρτηση TEXTJOIN (Excel 2019 και Office 365)

Vlookup για την επιστροφή πολλαπλών τιμών σε ένα κελί με συνάρτηση καθορισμένη από το χρήστη

Vlookup για να επιστρέψετε πολλές τιμές σε ένα κελί με μια χρήσιμη λειτουργία


Vlookup για επιστροφή πολλαπλών τιμών σε ένα κελί με τη συνάρτηση TEXTJOIN (Excel 2019 και Office 365)

Εάν έχετε την υψηλότερη έκδοση του Excel όπως το Excel 2019 και το Office 365, υπάρχει μια νέα λειτουργία - ΚΕΙΜΕΝΟ, με αυτήν την ισχυρή λειτουργία, μπορείτε να δείτε γρήγορα και να επιστρέψετε όλες τις αντίστοιχες τιμές σε ένα κελί.

Vlookup για να επιστρέψετε όλες τις αντίστοιχες τιμές σε ένα κελί

Εφαρμόστε τον παρακάτω τύπο σε ένα κενό κελί όπου θέλετε να βάλετε το αποτέλεσμα και, στη συνέχεια, πατήστε Ctrl + Shift + Εισαγωγή πλήκτρα μαζί για να λάβετε το πρώτο αποτέλεσμα και, στη συνέχεια, σύρετε τη λαβή πλήρωσης προς τα κάτω στο κελί που θέλετε να χρησιμοποιήσετε αυτόν τον τύπο και θα λάβετε όλες τις αντίστοιχες τιμές όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

=TEXTJOIN(",",TRUE,IF($A$2:$A$11=E2,$C$2:$C$11,""))

Σημείωση: Στον παραπάνω τύπο, A2: A11 είναι το εύρος αναζήτησης περιέχει τα δεδομένα αναζήτησης, E2 είναι η τιμή αναζήτησης, C2: C11 είναι το εύρος δεδομένων από το οποίο θέλετε να επιστρέψετε τις αντίστοιχες τιμές, ",είναι ο διαχωριστής για τον διαχωρισμό των πολλαπλών εγγραφών.

Vlookup για να επιστρέψετε όλες τις αντίστοιχες τιμές χωρίς διπλότυπα σε ένα κελί

Εάν θέλετε να επιστρέψετε όλες τις αντίστοιχες τιμές με βάση τα δεδομένα αναζήτησης χωρίς διπλότυπα, ο παρακάτω τύπος μπορεί να σας βοηθήσει.

Αντιγράψτε και επικολλήστε τον ακόλουθο τύπο σε ένα κενό κελί και, στη συνέχεια, πατήστε Ctrl + Shift + Εισαγωγή πλήκτρα μαζί για να λάβετε το πρώτο αποτέλεσμα και, στη συνέχεια, αντιγράψτε αυτόν τον τύπο για να γεμίσετε άλλα κελιά και θα λάβετε όλες τις αντίστοιχες τιμές χωρίς τις διπλές, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης:

=TEXTJOIN(",", TRUE, IF(IFERROR(MATCH($C$2:$C$11, IF(E2=$A$2:$A$11, $C$2:$C$11, ""), 0),"")=MATCH(ROW($C$2:$C$11), ROW($C$2:$C$11)), $C$2:$C$11, ""))

Σημείωση: Στον παραπάνω τύπο, A2: A11 είναι το εύρος αναζήτησης περιέχει τα δεδομένα αναζήτησης, E2 είναι η τιμή αναζήτησης, C2: C11 είναι το εύρος δεδομένων από το οποίο θέλετε να επιστρέψετε τις αντίστοιχες τιμές, ",είναι ο διαχωριστής για τον διαχωρισμό των πολλαπλών εγγραφών.

Vlookup για την επιστροφή πολλαπλών τιμών σε ένα κελί με συνάρτηση καθορισμένη από το χρήστη

Η παραπάνω συνάρτηση TEXTJOIN είναι διαθέσιμη μόνο για το Excel 2019 και το Office 365, εάν έχετε άλλες χαμηλότερες εκδόσεις του Excel, θα πρέπει να χρησιμοποιήσετε ορισμένους κωδικούς για την ολοκλήρωση αυτής της εργασίας.

Vlookup για να επιστρέψετε όλες τις αντίστοιχες τιμές σε ένα κελί

1. Κρατήστε πατημένο το ALT + F11 και ανοίγει το Microsoft Visual Basic για εφαρμογές παράθυρο.

2. Κλίκ Κύριο θέμα > Μονάδα μέτρησηςκαι επικολλήστε τον ακόλουθο κώδικα στο Παράθυρο ενότητας.

Κωδικός VBA: Vlookup για επιστροφή πολλαπλών τιμών σε ένα κελί

Function ConcatenateIf(CriteriaRange As Range, Condition As Variant, ConcatenateRange As Range, Optional Separator As String = ",") As Variant
'Updateby Extendoffice
Dim xResult As String
On Error Resume Next
If CriteriaRange.Count <> ConcatenateRange.Count Then
    ConcatenateIf = CVErr(xlErrRef)
    Exit Function
End If
For i = 1 To CriteriaRange.Count
    If CriteriaRange.Cells(i).Value = Condition Then
        xResult = xResult & Separator & ConcatenateRange.Cells(i).Value
    End If
Next i
If xResult <> "" Then
    xResult = VBA.Mid(xResult, VBA.Len(Separator) + 1)
End If
ConcatenateIf = xResult
Exit Function
End Function

3. Στη συνέχεια, αποθηκεύστε και κλείστε αυτόν τον κωδικό, επιστρέψτε στο φύλλο εργασίας και εισαγάγετε αυτόν τον τύπο: =CONCATENATEIF($A$2:$A$11, E2, $C$2:$C$11, ", ") σε ένα συγκεκριμένο κενό κελί όπου θέλετε να τοποθετήσετε το αποτέλεσμα και, στη συνέχεια, σύρετε τη λαβή πλήρωσης προς τα κάτω για να λάβετε όλες τις αντίστοιχες τιμές σε ένα κελί που θέλετε, δείτε το στιγμιότυπο οθόνης:

Σημείωση: Στον παραπάνω τύπο, A2: A11 είναι το εύρος αναζήτησης περιέχει τα δεδομένα αναζήτησης, E2 είναι η τιμή αναζήτησης, C2: C11 είναι το εύρος δεδομένων από το οποίο θέλετε να επιστρέψετε τις αντίστοιχες τιμές, ",είναι ο διαχωριστής για τον διαχωρισμό των πολλαπλών εγγραφών.

Vlookup για να επιστρέψετε όλες τις αντίστοιχες τιμές χωρίς διπλότυπα σε ένα κελί

Για να αγνοήσετε τα αντίγραφα στις επιστρεφόμενες τιμές αντιστοίχισης, κάντε τον παρακάτω κωδικό.

1. Κρατήστε πατημένο το Alt + F11 για να ανοίξετε το Microsoft Visual Basic για εφαρμογές παράθυρο.

2. Κλίκ Κύριο θέμα > Μονάδα μέτρησηςκαι επικολλήστε τον ακόλουθο κώδικα στο Παράθυρο ενότητας.

Κωδικός VBA: Vlookup και επιστροφή πολλαπλών μοναδικών αντιστοιχισμένων τιμών σε ένα κελί

Function MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
'Updateby Extendoffice
    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. Αφού εισαγάγετε τον κωδικό, κάντε κλικ στο Εργαλεία > αναφορές στο άνοιξε Microsoft Visual Basic για εφαρμογές παράθυρο, και στη συνέχεια, στο αναδυόμενο Αναφορές - VBAProject πλαίσιο διαλόγου, επιλέξτε Χρόνος εκτέλεσης δέσμης ενεργειών Microsoft επιλογή του Διαθέσιμες αναφορές πλαίσιο λίστας, δείτε στιγμιότυπα οθόνης:

4. Στη συνέχεια κάντε κλικ στο κουμπί OK για να κλείσετε το παράθυρο διαλόγου, να αποθηκεύσετε και να κλείσετε το παράθυρο κώδικα, να επιστρέψετε στο φύλλο εργασίας και να εισαγάγετε αυτόν τον τύπο: =MultipleLookupNoRept(E2,$A$2:$C$11,3) into a blank cell where you want to output the result, and then drag the fill hanlde down to get all matching values, see screenshot:

Σημείωση: Στον παραπάνω τύπο, Α2: Γ11 είναι το εύρος δεδομένων που θέλετε να χρησιμοποιήσετε, E2 είναι η τιμή αναζήτησης, ο αριθμός 3 είναι ο αριθμός στήλης που περιέχει τις επιστρεφόμενες τιμές.

Vlookup για να επιστρέψετε πολλές τιμές σε ένα κελί με μια χρήσιμη λειτουργία

 Εάν έχετε το δικό μας Kutools για Excel, Με τους Σύνθετες σειρές συνδυασμού δυνατότητα, μπορείτε να συγχωνεύσετε ή να συνδυάσετε γρήγορα τις σειρές με βάση την ίδια τιμή και να κάνετε μερικούς υπολογισμούς όπως χρειάζεστε.

Σημείωση:Για να το εφαρμόσετε Σύνθετες σειρές συνδυασμού, πρώτα, πρέπει να κατεβάσετε το Kutools για Excelκαι, στη συνέχεια, εφαρμόστε τη λειτουργία γρήγορα και εύκολα.

Μετά την εγκατάσταση Kutools για Excel, κάντε τα εξής:

1. Επιλέξτε το εύρος δεδομένων που θέλετε να συνδυάσετε δεδομένα μιας στήλης με βάση μια άλλη στήλη.

2. Κλίκ Kutools > Συγχώνευση & διαχωρισμός > Σύνθετες σειρές συνδυασμού, δείτε το στιγμιότυπο οθόνης:

3. Στο αναδυόμενο Σύνθετες σειρές συνδυασμού κουτί διαλόγου:

  • Κάντε κλικ στο όνομα της στήλης κλειδιού που θα συνδυαστεί βάσει και, στη συνέχεια, κάντε κλικ στο Πρωτεύων κλειδί
  • Στη συνέχεια, κάντε κλικ σε μια άλλη στήλη που θέλετε να συνδυάσετε τα δεδομένα της με βάση τη στήλη κλειδιού και κάντε κλικ στο Συνδυασμός για να επιλέξετε ένα διαχωριστικό για το διαχωρισμό των συνδυασμένων δεδομένων.

4. Στη συνέχεια κάντε κλικ στο κουμπί OK κουμπί και θα λάβετε τα ακόλουθα αποτελέσματα:

Κατεβάστε και δωρεάν δοκιμή Kutools για Excel τώρα!


Σχετικά άρθρα:

  • Λειτουργία VLOOKUP με ορισμένα βασικά και προηγμένα παραδείγματα
  • Στο Excel, η συνάρτηση VLOOKUP είναι μια ισχυρή συνάρτηση για τους περισσότερους χρήστες του Excel, η οποία χρησιμοποιείται για να αναζητήσει μια τιμή στο αριστερότερο εύρος δεδομένων και να επιστρέψει μια αντίστοιχη τιμή στην ίδια σειρά από μια στήλη που καθορίσατε. Αυτό το σεμινάριο μιλά για τον τρόπο χρήσης της λειτουργίας VLOOKUP με ορισμένα βασικά και προηγμένα παραδείγματα στο Excel.
  • Επιστρέψτε πολλές τιμές αντιστοίχισης με βάση ένα ή περισσότερα κριτήρια
  • Κανονικά, αναζητήστε μια συγκεκριμένη τιμή και επιστρέψτε το αντίστοιχο στοιχείο είναι εύκολο για τους περισσότερους από εμάς χρησιμοποιώντας τη λειτουργία VLOOKUP. Ωστόσο, έχετε προσπαθήσει ποτέ να επιστρέψετε πολλές τιμές αντιστοίχισης με βάση ένα ή περισσότερα κριτήρια; Σε αυτό το άρθρο, θα παρουσιάσω ορισμένους τύπους για την επίλυση αυτής της σύνθετης εργασίας στο Excel.
  • Vlookup και επιστροφή πολλαπλών τιμών κάθετα
  • Κανονικά, μπορείτε να χρησιμοποιήσετε τη συνάρτηση Vlookup για να λάβετε την πρώτη αντίστοιχη τιμή, αλλά, μερικές φορές, θέλετε να επιστρέψετε όλες τις εγγραφές που ταιριάζουν με βάση ένα συγκεκριμένο κριτήριο. Αυτό το άρθρο, θα μιλήσω για το πώς να βλέπω και να επιστρέφω όλες τις αντίστοιχες τιμές κάθετα, οριζόντια ή σε ένα μόνο κελί.
  • Vlookup και επιστροφή πολλαπλών τιμών από την αναπτυσσόμενη λίστα
  • Στο Excel, πώς θα μπορούσατε να δείτε και να επιστρέψετε πολλές αντίστοιχες τιμές από μια αναπτυσσόμενη λίστα, πράγμα που σημαίνει ότι όταν επιλέγετε ένα στοιχείο από την αναπτυσσόμενη λίστα, όλες οι σχετικές τιμές εμφανίζονται ταυτόχρονα. Αυτό το άρθρο, θα παρουσιάσω τη λύση βήμα προς βήμα.

Τα καλύτερα εργαλεία παραγωγικότητας του Office

Το Kutools για Excel λύνει τα περισσότερα από τα προβλήματά σας και αυξάνει την παραγωγικότητά σας κατά 80%

  • Επαναχρησιμοποίηση: Εισαγάγετε γρήγορα σύνθετοι τύποι, γραφήματα και οτιδήποτε έχετε χρησιμοποιήσει στο παρελθόν. Κρυπτογράφηση κυττάρων με κωδικό πρόσβασης Δημιουργία λίστας αλληλογραφίας και στείλτε email ...
  • Super Formula Bar (επεξεργαστείτε εύκολα πολλές γραμμές κειμένου και τύπου). Διάταξη ανάγνωσης (εύκολη ανάγνωση και επεξεργασία μεγάλου αριθμού κελιών). Επικόλληση σε φιλτραρισμένο εύρος...
  • Συγχώνευση κελιών / σειρών / στηλών χωρίς απώλεια δεδομένων · Περιεχόμενο διαχωρισμού κελιών Συνδυάστε διπλές σειρές / στήλες... Αποτροπή διπλών κυττάρων; Συγκρίνετε τα εύρη...
  • Επιλέξτε Διπλότυπο ή Μοναδικό Σειρές; Επιλέξτε Κενές σειρές (όλα τα κελιά είναι κενά). Σούπερ εύρεση και ασαφής εύρεση σε πολλά βιβλία εργασίας. Τυχαία επιλογή ...
  • Ακριβές αντίγραφο Πολλαπλά κελιά χωρίς αλλαγή της αναφοράς τύπου. Αυτόματη δημιουργία αναφορών σε πολλαπλά φύλλα? Εισαγωγή κουκκίδων, Πλαίσια ελέγχου και άλλα ...
  • Εξαγωγή κειμένου, Προσθήκη κειμένου, Κατάργηση κατά θέση, Αφαιρέστε το διάστημα; Δημιουργία και εκτύπωση υποσύνολων σελιδοποίησης. Μετατροπή περιεχομένου και σχολίων μεταξύ κελιών...
  • Σούπερ φίλτρο (αποθηκεύστε και εφαρμόστε σχήματα φίλτρων σε άλλα φύλλα). Προηγμένη ταξινόμηση ανά μήνα / εβδομάδα / ημέρα, συχνότητα και άλλα. Ειδικό φίλτρο με έντονη, πλάγια ...
  • Συνδυάστε βιβλία εργασίας και φύλλα εργασίας; Συγχώνευση πινάκων βάσει βασικών στηλών. Διαχωρίστε τα δεδομένα σε πολλά φύλλα; Μαζική μετατροπή xls, xlsx και PDF...
  • Περισσότερα από 300 ισχυρά χαρακτηριστικά. Υποστηρίζει Office / Excel 2007-2019 και 365. Υποστηρίζει όλες τις γλώσσες. Εύκολη ανάπτυξη στην επιχείρηση ή τον οργανισμό σας. Πλήρεις δυνατότητες δωρεάν δοκιμής 30 ημερών. Εγγύηση επιστροφής χρημάτων 60 ημερών.
kte καρτέλα 201905

Το Office Tab φέρνει τη διεπαφή με καρτέλες στο Office και κάνει την εργασία σας πολύ πιο εύκολη

  • Ενεργοποίηση επεξεργασίας και ανάγνωσης καρτελών σε Word, Excel, PowerPoint, Publisher, Access, Visio και Project.
  • Ανοίξτε και δημιουργήστε πολλά έγγραφα σε νέες καρτέλες του ίδιου παραθύρου και όχι σε νέα παράθυρα.
  • Αυξάνει την παραγωγικότητά σας κατά 50%και μειώνει εκατοντάδες κλικ ποντικιού για εσάς κάθε μέρα!
κάτω μέρος γραφείου
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Jazlyn · 1 months ago
    Hi, Thanks so much this worked!
    I used it to pull dates, that populated in the serial number format (Changing the format to short date format using =TEXT(A2,”mm/dd/yy”) OR =DATEVALUE(A2) are not working. Do you have any solutions?
  • To post as a guest, your comment is unpublished.
    Hasnae · 1 months ago
    Thank you for the explanations, however the function 'MultipleLookupNoRept' does not work on my file, could you tell me if an error exists.
    • To post as a guest, your comment is unpublished.
      skyyang · 1 months ago
      Hi, Hasnae,
      Please check if you miss the third step -  check Microsoft Scripting Runtime option in the Available References list box.


  • To post as a guest, your comment is unpublished.
    Salman · 1 years ago
    Thank you so much for the code. Is there a way I can use the code to look up multiple values from multiple sheets? I tried to combine your function with IFERROR function but it doesn't seem to work.
  • To post as a guest, your comment is unpublished.
    Joe · 1 years ago
    Can this be modified to place the sum of those values? Instead of (400 400 400 400 400 400), can it sum them to show (2400)?
  • To post as a guest, your comment is unpublished.
    Yudhi · 1 years ago
    How with HLookUp function?

  • To post as a guest, your comment is unpublished.
    Chris F · 1 years ago
    thanks for the code. I have modified it to allow you to optionally specify your own separator, Default is " ", if you specify the separator as"#cr" it will insert a CR/LF so the values will be on a separate line in the cell. It only applies the separator if there are multiple values

    Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long, Optional ByVal pSep As Variant)
    ' ### Returns multiple values from a table into 1 cell ###
    ' pValue is the key value to lookup
    ' WorkRng is the Table you want to look up
    ' pIndex is the column # for the values to be returned from the pWorkRng
    ' pSep (optional) is the separator to be used. if omitted then default is a space (it doesn't apply the separator for the 1st entry)
    ' if the separtor = "#cr" it will separate the values on different line in the cell
    Dim rng As Range
    Dim sSep As String
    Dim xResult As String
    Dim Item1 As Boolean
    Item1 = True

    If IsMissing(pSep) = True Then
    sSep = vbCr
    Else
    If pSep = "#cr" Then
    sSep = vbCrLf
    Else
    sSep = pSep
    End If
    End If

    xResult = ""
    For Each rng In pWorkRng
    If rng = pValue Then
    If Item1 Then
    xResult = xResult & rng.Offset(0, pIndex - 1)
    Item1 = False
    Else
    xResult = xResult & sSep & rng.Offset(0, pIndex - 1)
    End If
    End If
    Next
    MYVLOOKUP = xResult
    End Function


    • To post as a guest, your comment is unpublished.
      Brad · 1 years ago
      Thank you for this, the line breaks are what i needed to top this formula off! Question, is there a way to modify the code so that two values are compared? For example, similar to what we see with index and match, can i look for Product and Quantity columns, and based on those parameters it outputs results from the Region Column?
  • To post as a guest, your comment is unpublished.
    James · 1 years ago
    Thanks a lot for this code, it is very helpful. Does anyone know away to sum the values in the cell to just have at total of them.
    Cheers
    • To post as a guest, your comment is unpublished.
      skyyang · 1 years ago
      Hello, James, to sum values based on the corresponding items, the following article may help you, please chek it:
      https://www.extendoffice.com/documents/excel/1268-excel-combine-duplicate-rows-and-sum.html
  • To post as a guest, your comment is unpublished.
    Sasi maddy · 1 years ago
    I have a server, it has connected with multiple applications. I want to compare compare two column and get the related applications details for that server.

    What is the command for that.
  • To post as a guest, your comment is unpublished.
    Matt K · 1 years ago
    Put comma between each response: =SUBSTITUTE(TRIM(myvlookup(E6,$A$2:$C$15,2))," ",", ")
  • To post as a guest, your comment is unpublished.
    Martin · 2 years ago
    Unfortunately it does not work for me =myvlookup(E6,$A$2:$C$15,2) as the result is #NAME?
    • To post as a guest, your comment is unpublished.
      Mr. Summey · 1 years ago
      Did you get this figured out? I am having the same problem.
      • To post as a guest, your comment is unpublished.
        Zahsan · 1 years ago
        having the same problem :(
  • To post as a guest, your comment is unpublished.
    Steven · 2 years ago
    Thank you. I just modified so that it will replace the comma at the start and replace the last comma with "And".

    (Working with states)

    Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)

    Dim rng As Range
    Dim xResult, States As String
    Dim Pos As Long
    xResult = ""
    For Each rng In pWorkRng
    If rng = pValue Then
    xResult = xResult & ", " & rng.Offset(0, pIndex - 1)
    End If
    Next
    States = Right(xResult, Len(xResult) - 2)
    Pos = InStrRev(States, ",")

    If Pos > 1 Then
    States = Mid(States, 1, Pos - 1) & Replace(States, ",", " AND", Pos)

    End If

    MYVLOOKUP = States
    End Function
  • To post as a guest, your comment is unpublished.
    Devinder Kaur · 2 years ago
    do we have the code to work it from last to first. like we have multiple values in columnB and we want them in row with column A remain same.
  • To post as a guest, your comment is unpublished.
    Pam · 3 years ago
    For some reason this macro is extremely slow for me, every time I click anywhere it takes about 5-10 minutes to calculate.
  • To post as a guest, your comment is unpublished.
    Alex · 3 years ago
    Tthat's what I wanted! Thank you very much XD
  • To post as a guest, your comment is unpublished.
    Tom T · 3 years ago
    This is amazing, thank you!
  • To post as a guest, your comment is unpublished.
    Mark · 3 years ago
    Great function, however chunking through 100,000 records proves a bit much for my poor laptop, will need to let it run overnight!
  • To post as a guest, your comment is unpublished.
    Will · 3 years ago
    Is there a way of amending the result so instead of showing 1000 1000 -1000 it would show for example 1,000/1,000/(1,000) ?
  • To post as a guest, your comment is unpublished.
    Kabilankumar · 4 years ago
    Great macro, useful.

    But need to know can it be modified to check 2 criteria & does anyone found anyway to make wildcards work on it.

    Any help?
  • To post as a guest, your comment is unpublished.
    Jay · 4 years ago
    No matter what I do, I always get #value! returned instead of a result. vlookup works just fine, so the data works. Already followed the process of enabling macros. I even combined everything into a single sheet. Any ideas??
  • To post as a guest, your comment is unpublished.
    Curtis · 4 years ago
    This worked perfectly, but it did take me some time to get the Function work properly within my 20 tab, 50k+ line spreadsheet.
    Now the BIG question is how to take that delimited string and then use each entry as an Index/Match (not married to Index/Match, but it seems faster) lookup value in another dataset, returning the SUM value of all returns into one cell. My scenario is that I have a Single Order that has multiple invoices. Your MYVLOOKUP Function works superbly to report back all of the invoices in one cell. What I want to do now is to take each concatenated return with the reported cell, spin through that array and total the amounts of payment of each invoice back into the formula cell.

    I appreciate any help that you can offer on this and thanks for the MYVLOOKUP Function!
  • To post as a guest, your comment is unpublished.
    Alex Chow · 5 years ago
    To get unique record, you may use below: (modified by refer other user code)


    Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
    'Update 20150310
    'Updated 6/9/16 Jay Coltrain
    'Dim rng As Range
    Dim xResult As String
    xResult = ""

    Dim Rows As Long, i As Long
    Rows = pWorkRng.Rows.Count

    For i = 1 To Rows
    If pWorkRng.Cells(i, 1).Value = pValue Then
    xResult = xResult & "," & pWorkRng.Cells(i, 1).Offset(0, pIndex - 1)
    End If
    Next i

    Dim varSection As Variant
    Dim sTemp As String
    Dim sDelimiter As String

    sDelimiter = ","

    For Each varSection In Split(xResult, sDelimiter)
    If InStr(1, sDelimiter & sTemp & sDelimiter, sDelimiter & varSection & sDelimiter, vbTextCompare) = 0 Then
    sTemp = sTemp & sDelimiter & varSection
    End If
    Next varSection


    MYVLOOKUP = Mid(sTemp, Len(sDelimiter) + 1)
    End Function
  • To post as a guest, your comment is unpublished.
    Spyros Tzortzis · 5 years ago
    Heads-up. I figured out how to get any separator in that output. Its rudimentary. But I figured it out.

    xResult = xResult & "///" & rng.Offset(0, pIndex - 1)

    The last and most wished for thing though is enabling it to work with wildcards in the search criteria. Thank you again for this beautiful and brilliant solution. Extremely helpful. Now just want to get get the macro to run and be installed in my excel perminantly no matter what I'm doing so I can use it when I need to.

    And wildcards!

    Thank you so much.

    Wildcards are all that are left to do.
  • To post as a guest, your comment is unpublished.
    Spyros Tzortzis · 5 years ago
    Hi,

    It works well. What I would like to do is adapt the code to seperate thee value results with "///" or any other marker (for technical reasons, I don't want just a single character seperator).

    Also, I noticed that this formula doesnt work with a wild card. I know i am asking too much, but it doesnt as vlookup can work when i search for =myvlookup("*"&E6&"*",$A$2:$C$15,2) which it would do/could do.

    Any assistance?
  • To post as a guest, your comment is unpublished.
    Ajay · 5 years ago
    Return nothing! after applying MYLOOKUP giving no result but blank.
  • To post as a guest, your comment is unpublished.
    Rob · 5 years ago
    Notify me of follow-up comments
  • To post as a guest, your comment is unpublished.
    cory · 5 years ago
    This works great, but I still need help with the command function to remove duplicates from the results.
  • To post as a guest, your comment is unpublished.
    cory · 5 years ago
    This works great, but I need help with the command to remove duplicates from the results. Seriously though, Great work.
  • To post as a guest, your comment is unpublished.
    Jay · 5 years ago
    This is exactly what I was looking for and did not think of just making my own UDF. However it will not function exactly like VLOOKUP. If the string you are looking for is not only in the first column then it could give you data outside the original range passed.

    Name Number Other name Column not in range passed
    Jay 1 Jay 1
    Jay 2 Jay 2
    Chris 3 Chris 3
    Jorge 4 Jorge 4
    Jay 5 Jay 5
    Jorge 6 Jorge 6

    If the above table were cells A1:D7 if you passed only A1:C7 your "MYVLOOKUP" function returns 1 1 2 2 5 5 when you would expect it to return 1 2 5.

    The changes below fix the issue:

    Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
    'Update 20150310
    'Updated 6/9/16 Jay Coltrain
    'Dim rng As Range
    Dim xResult As String
    xResult = ""

    Dim Rows As Long, i As Long
    Rows = pWorkRng.Rows.Count

    For i = 1 To Rows
    If pWorkRng.Cells(i, 1).Value = pValue Then
    xResult = xResult & " " & pWorkRng.Cells(i, 1).Offset(0, pIndex - 1)
    End If
    Next i

    'For Each rng In pWorkRng
    ' If rng = pValue Then
    ' xResult = xResult & " " & rng.Offset(0, pIndex - 1)
    ' End If
    'Next
    MYVLOOKUP = xResult
    End Function
  • To post as a guest, your comment is unpublished.
    Ari · 5 years ago
    Thank you for the VBA-code. I got exactly what I want!

    I modified only the code " rng.Offset(0, pIndex - 1) " to " rng.Offset(0, pIndex - 2) " . So is MYVLOOKUP able to search from Right to Left.
  • To post as a guest, your comment is unpublished.
    Ankit Jain · 5 years ago
    Hi,
    i am really impressed with the work and its so easy to create one to use this function. however i need further support.

    My ? is that how can i select a number from a cell with multiple cell in my vlookup array. i.e.

    If cell A1 = 100, A2 = 350, A3 = 69

    C1 = 100; 1222; 12133
    C2 = 69; 222
    D1 = Apple
    D2 = banana

    So how can select 100 from my table array column C to derive correspondent D1 = apple

    Please note that i have 7 digit numbers in my lookup value and table array which is separated by a ";". I would really appreciate if you can solve this and help me in saving a lot time.
  • To post as a guest, your comment is unpublished.
    Ajay · 5 years ago
    Awesome work.. Got exactly what I want !!! Love it !!
  • To post as a guest, your comment is unpublished.
    Colleen · 5 years ago
    Thank you for sharing the above code. I've been using this for several months now but today it doesn't seem to work. I'm getting blank cells instead of the usual error when there is data to be returned. Any thoughts?
  • To post as a guest, your comment is unpublished.
    David V · 6 years ago
    Thanks for the VBA code above. Can you tell me how to make the results enter onto a new line in the cell, ie like Alt-Enter
    300
    400
    1000
    1300
  • To post as a guest, your comment is unpublished.
    David Atwell · 6 years ago
    How would I adjust this formula to separate each returned value but ", " as well as only return unique values?
    • To post as a guest, your comment is unpublished.
      Michael · 1 years ago
      Thanks for the code!!

      As for wildcards, a way around is using INSTR

      You can replace the [ If rng = pValue Then ] with [ InStr(1, rng.Value, pValue) Then ] and if you don't want it to be case sensitive then use [ InStr(1, rng.Value, pValue, vbTextCompare) Then ]