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

Hur slår jag upp och returnerar flera värden utan dubbletter i Excel? 

Ibland kanske du vill söka efter och returnera flera matchade värden i en enda cell samtidigt. Men om det finns några upprepade värden som fylls i de returnerade cellerna, hur kan du ignorera dubbletterna och bara behålla de unika värdena när du returnerar alla matchande värden som följande skärmdump visas i Excel?

doc returnerar flera unika värden 1

Vlookup och returnera flera matchande värden utan dubbletter med användardefinierad funktion


Vlookup och returnera flera matchande värden utan dubbletter med användardefinierad funktion

Följande VBA-kod kan hjälpa dig att returnera flera matchande värden utan dubbletter, gör så här:

1. Håll ner Alt + F11 nycklar för att öppna Microsoft Visual Basic för applikationer fönster.

2. Klicka Insert > Modulernaoch klistra in följande kod i Modulerna Fönster.

VBA-kod: Vlookup och returnera flera unika matchade värden:

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. När du har infogat koden klickar du sedan på verktyg > Referenser i det öppnade Microsoft Visual Basic för applikationer fönstret och sedan, i poppade ut Referenser - VBAProject dialogruta, kontrollera Microsoft Scripting Runtime alternativet i Tillgängliga referenser listruta, se skärmdump:

doc returnerar flera unika värden 2

4. Klicka sedan OK för att stänga dialogrutan, spara och stäng kodfönstret, gå tillbaka till kalkylbladet och skriv in denna formel: =MultipleLookupNoRept(E2,A2:C17,3) till en tom cell där du vill mata ut resultatet, tryck på ange för att få rätt resultat efter behov. Se skärmdump:

doc returnerar flera unika värden 3

Anmärkningar: I ovanstående formel, E2 är kriterierna som du vill titta på, A2: C17 är det dataområde du vill använda, numret 3 är kolumnnumret som innehåller de returnerade värdena.


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (13)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
vad händer om jag ville skapa en lista i en tabell från detta istället för alla resultat i en cell?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Tom,
Om du vill extrahera de unika värdena i en lista med celler istället för en cell, kan följande formel hjälpa dig:

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

Vänligen prova det.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Skyyang,

Tack så mycket för denna formel.
Det här fungerar för mig. Det tar dock lång tid att bearbeta från en stor uppsättning data.
Kan vi ändra den här formeln så att den fungerar så här lite snabbare?
Tack igen
Rasike
Denna kommentar minimerades av moderatoren på webbplatsen
Hej skyyang vad händer om du vill ha resultatet som en kolumn?
Denna kommentar minimerades av moderatoren på webbplatsen
Finns det något sätt att lägga till ett mellanslag mellan de multipla värdena som hämtas i resultaten utan att införa ett kommatecken i slutet av listan? Till exempel skulle ditt resultat ovan visas som: "Emily, James, Daisy, Gary" istället för så här: "Emily, James, Daisy, Gary"

Jag försökte redigera den här delen av VBA-koden: xStr = xStr & xDic.Keys(I) & "," till att vara detta: xStr = xStr & xDic.Keys(I) & ", "

Det lade till utrymmet mellan värdena, men det lade också till ett kommatecken efter det sista värdet. "Emily, James, Daisy, Gary,"

Finns det något sätt att få det att fungera med utrymmet men utan det extra kommatecken efter det sista värdet?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Demetre,
Använd utrymmet för att separera värdena, du behöver bara ändra vba-koden:
från xStr = xStr & xDic.Keys(i) & "," för att vara detta: xStr = xStr & xDic.Keys(i) & " "

Vänligen prova det.
Denna kommentar minimerades av moderatoren på webbplatsen
xStr = xStr & xDic.Keys(I) & "," för att vara detta: xStr = xStr & xDic.Keys(I) & ", "

Finns det något sätt att ersätta "," med ALT+ENTER i cellen, så att resultaten blir i samma cell men på olika rader? Behöver jag införa ytterligare VBA-modul för det och kombinera dem?

Dessutom är den här koden ganska långsam när man loopar över stora bord. Någon som vet några snabbare lösningar?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Imre,
För att separera resultatvärdena med Alt + Enter, använd följande användardefinierade funktion:

Funktion MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber Som heltal)
Dim xDic som ny ordbok
Dim xRows As Long
Dim xStr As String
Dim jag så länge
On Error Resume Next
xRows = LookupRange.Rows.Count
För i = 1 Till xRows
Om LookupRange.Columns(1).Cells(i).Value = Lookupvalue Då
xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
End If
Nästa
xStr = ""
MultipleLookupNoRept = xStr
Om xDic.Count > 0 Då
För i = 0 Till xDic.Count - 1
xStr = xStr & xDic.Keys(i) & Chr(10) + Chr(13)
Nästa
MultipleLookupNoRept = Left(xStr, Len(xStr) - 1)
End If
Debug.Print xStr
Änden Funktion

Och gör sedan med ovanstående steg i den här artikeln, äntligen, efter att ha angett formeln, bör du klicka på Wrap Text under fliken Hem.
Denna kommentar minimerades av moderatoren på webbplatsen
Hi

Jag ville skapa en lista i en tabell från detta istället för alla resultat i en cell. Så jag har använt en formel liknande nedan (vad du har föreslagit)

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

Detta tar dock lång tid att bearbeta från en stor uppsättning data.
Finns det någon alternativ metod för att bearbeta detta snabbare?
Tack igen
Rasike
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
medan tiden för lottvärde multivlooks mitt kalkylblad hängde sig. finns det några andra sätt att multivlookupwithoutrepeation????

och jag använde också på det nya skrivbordet, det hänger sig bara...

mitt datavärde är runt 10,000 XNUMX rader
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag gjorde som du sa och det var bra men det har fortfarande inte löst ett av mina problem, vad händer när du har ett unikt värde varje månad? =MultipleLookupNoRept(E2,A2:C17,3) , jag försöker E2&1 för januari men det fungerar inte
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, Jame,
Kan du ge ditt problem som en skärmdump här, så att jag kan förstå dina krav?
Denna kommentar minimerades av moderatoren på webbplatsen
Det här är bra! Hur skulle jag anpassa detta för att inte lägga till nollvärden i ordboken? Jag har försökt lägga till den fetstilta nedan, men den sista strängen återkommer fortfarande med "", instanser.


xRows = LookupRange.Rows.Count
För i = 1 Till xRows
Om LookupRange.Columns(1).Cells(i).Value = Lookupvalue And Not IsEmpty(LookupRange.Columns(1).Cells(i).Value) Då
xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
End If
Nästa

Tack,
Det finns inga kommentarer här ännu
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL