Suggerimento: le altre lingue sono tradotte da Google. Puoi visitare il English versione di questo link.
Connetti
x
or
x
x
Registrati
x

or

Come vlookup per restituire più valori in una cella in Excel?

Normalmente, in Excel, quando si utilizza la funzione CERCA.VERT, se ci sono più valori per soddisfare i criteri, è sufficiente ottenere il primo. Ma, a volte, vuoi restituire tutti i valori corrispondenti che soddisfano i criteri in una cella come mostrato nella seguente schermata, come potresti risolverlo?

Vlookup per restituire più valori in una cella con Funzione definita dall'utente

Vlookup per restituire più valori in una cella con kutools per Excel

doc-vlookup-più-valori-unicellulare-1


Vlookup per restituire più valori corrispondenti in una singola cella:

Con Kutools for Excel'S Combina righe avanzate utilmente, puoi combinare rapidamente più righe duplicate in un unico record basato su colonne chiave e anche applicare alcuni calcoli come somma, media, conteggio e così via per altre colonne.

  • 1. Specificare la colonna chiave in cui si desidera combinare un'altra colonna in base a;
  • 2. Scegli il separatore per i tuoi dati combinati.

doc combina il testo in base ai criteri 10

Kutools for Excel: con più di 200 pratici componenti aggiuntivi di Excel, liberi di provare senza limitazioni nei giorni 60. Scarica e prova gratis ora!

>

La tradizionale funzione CERCA.VERT non può aiutarti a risolvere questo problema, ma creerò una funzione definita dall'utente per far fronte a questa attività. Si prega di fare come segue:

1. Attiva il tuo foglio di lavoro che desideri visualizzare più valori in una cella.

2. Tenere premuto il tasto ALT + F11 chiavi, e apre il Finestra di Microsoft Visual Basic per applicazioni.

3. Clic inserire > Moduloe incollare il seguente codice nel Finestra del modulo.

Codice VBA: Vlookup per restituire più valori in una cella

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
'Update 20150310
Dim rng As Range
Dim xResult As String
xResult = ""
For Each rng In pWorkRng
    If rng = pValue Then
        xResult = xResult & " " & rng.Offset(0, pIndex - 1)
    End If
Next
MYVLOOKUP = xResult
End Function

4. Quindi salva e chiudi questo codice, torna al foglio di lavoro e inserisci questa formula: = Myvlookup (E6, $ A $ 2: $ C $ 15,2) in una cella vuota specifica in cui si desidera posizionare il risultato, quindi premere entrare chiave per ottenere tutti i valori corrispondenti in una cella che vuoi, vedi screenshot:

doc-vlookup-più-valori-unicellulare-2

Nota:

Nella formula precedente: E6 è il valore a cui vuoi restituire le informazioni relative, A2: C15 è l'intervallo di dati che usi, il numero 2 indica il numero di colonna che viene restituito il valore corrispondente.


Se si dispone il nostro Kutools for Excel, Con la sua Combina righe avanzate funzione, è possibile unire rapidamente o combinare le righe in base allo stesso valore e fare alcuni calcoli.

Kutools for Excel : con più di 300 pratici componenti aggiuntivi di Excel, liberi di provare senza limiti nei giorni 60.

Dopo l'installazione Kutools for Excel, si prega di fare come segue:

1. Selezionare l'intervallo di dati per il quale si desidera combinare i dati di una colonna in base a un altro dato.

2. Clic Kutools > Contenuti > Combina righe avanzate, vedi screenshot:

doc-vlookup-più-valori-unicellulare-5

3. Nel Combina righe in base alla colonna finestra di dialogo, fare clic sulla colonna chiave da combinare in base a, quindi fare clic su Chiave primaria. Quindi fare clic su un'altra colonna per combinare i dati in base alla colonna chiave e fare clic Combinare per scegliere un separatore per separare i dati combinati, vedere screenshot:

doc-vlookup-più-valori-unicellulare-6

4. Quindi fare clic su OK pulsante, e otterrai i seguenti risultati:

doc-vlookup-più-valori-unicellulare-3 -2 doc-vlookup-più-valori-una-cella-4-4

Fare clic per saperne di più su questa funzione Advanced Combine Rows.

Scarica e prova gratuita Kutools per Excel ora!


Kutools for Excel: con più di 200 pratici componenti aggiuntivi di Excel, liberi di provare senza limitazioni nei giorni 60. Scarica e prova gratis ora!


Articoli correlati:

Come visualizzare il prossimo valore più grande in Excel?

Come visualizzare la tabella bidimensionale in Excel?

Come visionare un'altra cartella di lavoro?


Kutools per Excel: il miglior strumento di produttività per ufficio aumenta la produttività del 80%

  • Riutilizzo: Inserire rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Cifra le celle con password; Crea mailing list e invia email ...
  • Super Formula Bar (modifica facilmente più righe di testo e formula); Layout di lettura (leggere e modificare facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere i dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Previeni celle duplicate; Confronta le gamme...
  • Seleziona Duplica o Unica Righe; Seleziona righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molti libri di esercizi; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento alla formula; Creazione automatica di riferimenti a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • estrarre il testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare subtotali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtro ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale di grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle basate su colonne chiave; Dividi i dati in più fogli; Converti in batch xls, xlsx e PDF...
  • Oltre alle potenti funzionalità di 300. Supporta Office / Excel 2007-2019 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzioni complete di prova gratuita di 60-day.
kte tab 201905

Scheda Office Porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Editore, accesso, Visio e progetto.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la tua produttività di 50% e riduce centinaia di clic del mouse per te ogni giorno!
fondo officetab
Say something here...
symbols left.
You are guest ( Sign Up? )
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.
    Martin · 15 days 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.
    Steven · 1 months 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 · 5 months 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 · 10 months 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 · 11 months ago
    Tthat's what I wanted! Thank you very much XD
  • To post as a guest, your comment is unpublished.
    Tom T · 1 years ago
    This is amazing, thank you!
  • To post as a guest, your comment is unpublished.
    Mark · 1 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 · 1 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 · 2 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 · 2 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 · 2 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 · 2 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 · 2 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 · 2 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 · 3 years ago
    Return nothing! after applying MYLOOKUP giving no result but blank.
  • To post as a guest, your comment is unpublished.
    Rob · 3 years ago
    Notify me of follow-up comments
  • To post as a guest, your comment is unpublished.
    cory · 3 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 · 3 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 · 3 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 · 3 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 · 3 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 · 3 years ago
    Awesome work.. Got exactly what I want !!! Love it !!
  • To post as a guest, your comment is unpublished.
    Colleen · 3 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 · 4 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 · 4 years ago
    How would I adjust this formula to separate each returned value but ", " as well as only return unique values?