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

Hur extraherar man dynamiskt en lista med unika värden från ett kolumnområde i Excel?

För ett kolumnintervall som värdena ändras regelbundet, och du måste alltid hämta alla unika värden från intervallet oavsett hur det förändrades. Hur gör man en dynamisk lista över unika värden? Den här artikeln visar hur du hanterar det.

Extrahera dynamiskt en lista med unika värden från ett kolumnintervall med formel
Extrahera dynamiskt en lista med unika värden från ett kolumnintervall med VBA-kod


Extrahera dynamiskt en lista med unika värden från ett kolumnintervall med formel

Som bilden nedan visas måste du dynamiskt extrahera en lista med unika värden från intervall B2: B9. Försök med följande arrayformel.

1. Välj en tom cell som D2, ange nedanstående formel i den och tryck på ctrl + shift + ange samtidigt. (B2: B9 är kolumndata som du vill extrahera de unika värdena, D1 är ovanstående cell där din formel finns)

=IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$1:D1, $B$2:$B$9), 0)),"")

2. Fortsätt att välja cell D2 och dra sedan ner Fill Handle för att få alla unika värden från det angivna intervallet.

Nu extraheras alla unika värden i kolumnområde B2: B9. När värden i detta intervall ändras kommer den unika värdelistan att ändras direkt.

Välj enkelt och markera alla unika värden i ett intervall i Excel:

Du har nu möjlighet Välj Duplicera och unika celler nytta av Kutools för Excel kan hjälpa dig att enkelt markera och markera alla unika värden (inkludera de första dubbletterna) eller de unika värdena som bara visas en gång, samt duplicera värden som du behöver, som visas nedan.
Ladda ner Kutools för Excel nu! (30- dag gratis spår)


Extrahera dynamiskt en lista med unika värden från ett kolumnintervall med VBA-kod

Du kan också extrahera en lista med unika värden dynamiskt från ett kolumnområde med följande VBA-kod.

1. Tryck andra + F11 samtidigt för att öppna Microsoft Visual Basic för applikationer fönster.

2. I Microsoft Visual Basic för applikationer fönstret klickar Insert > Modulerna. Kopiera sedan och klistra in nedanstående VBA-kod i Modulerna fönster.

VBA-kod: Extrahera en lista med unika värden från ett intervall

Sub CreateUniqueList()
Dim xRng As Range
Dim xLastRow As Long
Dim xLastRow2 As Long
Dim I As Integer
On Error Resume Next
Set xRng = Application.InputBox("Please select range:", "Kutools for Excel", Selection.Address, , , , , 8)
If xRng Is Nothing Then Exit Sub
On Error Resume Next
xRng.Copy Range("D2")
xLastRow = xRng.Rows.Count + 1
ActiveSheet.Range("D2:D" & xLastRow).RemoveDuplicates Columns:=1, Header:=xlNo
xLastRow2 = Cells(Rows.Count, "B").End(xlUp).Row
For I = 1 To xLastRow2
  If ActiveSheet.Range("D2:D" & xLastRow2).Cells(I).Value = "" Then
     ActiveSheet.Range("D2:D" & xLastRow2).Cells(I).Delete
  End If
Next
End Sub

Anmärkningar: I koden är D2 cellen som du hittar den unika värdelistan. Du kan ändra det efter behov.

3. Gå tillbaka till kalkylbladet, klicka Insert > Former > rektangel. Se skärmdump:

4. Rita en rektangel i kalkylbladet och ange sedan några ord som du behöver visa på det. Högerklicka sedan på den och välj Tilldela makro från högerklickmenyn. I Tilldela makro dialogrutan väljer du Skapa UniqueList i Makronamn och klicka sedan på OK knapp. Se skärmdump:

5. Klicka nu på rektangelknappen, a Kutools för Excel dialogrutan dyker upp, välj intervallet som innehåller unika värden du behöver extrahera och klicka sedan på OK knapp.

Från och med nu kan du upprepa steg 5 ovan för att uppdatera den unika värdelistan automatiskt.


Relaterade artiklar:


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 (35)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
Tack för handledningen. Med hjälp av formelmetoden, hur skulle du ändra formeln om du ville lägga till ett kategorikval? Säg att du i kolumn C skiljer på om föremålet är en frukt eller en grönsak. Hur skulle du ändra koden för att bara sortera de unika frukterna och utesluta grönsakerna? Jag försökte ersätta COUNTIF med COUNTIFS, med det andra countifs-kriteriet (LIST RANGE,"CATEGORY") men det returnerar tomt. Skulle jag behöva utöka min array och införliva VLOOKUP?
Denna kommentar minimerades av moderatoren på webbplatsen
Jag är hygglig i excel men jag försöker verkligen linda mitt huvud kring hur och varför ovanstående formel fungerar (den fungerar för det jag använder den till men jag måste förstå varför). Jag blir lite förvirrad när jag använder arrayer ibland så alla förklaringar i idiottermer skulle vara oerhört hjälpsamma.
Denna kommentar minimerades av moderatoren på webbplatsen
Denna formel är föråldrad och fungerar inte. Jag har bokstavligen precis ställt in detta exakta excelark för att se om jag kunde få den här formeln att fungera och det gör den inte.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej kille,
Vilken Office-version använder du?
Denna kommentar minimerades av moderatoren på webbplatsen
{=INDEX($Q$3:$Q$263,MATCH(0,COUNTIF(V$2:V2,$Q$3:$Q$263),0))} - hittade att detta fungerade från en annan webbplats...

Använd Ctrl+Skift+Enter för att få array-funktionen (lockiga klammerparenteser). Dra copy-paste formlerna tills #NA visas. Min datamängd fanns i kolumn-Q, den jämfördes för att se om den fanns i den unika listan i kolumn-V, som kontinuerligt sträcker sig längs samma kolumn.
Denna kommentar minimerades av moderatoren på webbplatsen
God dag.
Vänligen lista alla unika värden i kolumn Q med formeln abobv och använd sedan formeln =IF(D2=V1,"Match","Ingen matchning") för att jämföra om de unika i cilumn Q jämför med kolumn V i samma rad .
Denna kommentar minimerades av moderatoren på webbplatsen
Hej och tack för din hjälp.

Jag behöver exakt den här funktionen, men min lista med "unika värden" måste sträcka sig över kolumner istället för rader, så den expanderande listan ner på raderna kommer inte att fungera för mig.

Hur kan jag ändra denna formel för att få listan "unika värden" att expandera när jag drar den över kolumnerna?

Offset()?
Transponera()?
Indirect() med en sträng av absoluta referenser sammanlänkade med en referens till kolumnen istället för rad?


Tack igen!
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Ryan,
Denna formel =IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$2:D2, $B$2:$B$9), 0)),"") + Ctrl + Shift + Enter kan hjälpa dig att lösa problemet.
Se nedanstående skärmdump:
Denna kommentar minimerades av moderatoren på webbplatsen
Också, oavsett anledning, gav den ursprungliga formeln:
=IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$1:D1, $B$2:$B$9), 0)),"")

returnerar en "cirkulär referens" varning och kommer inte att beräkna..
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Ryan,
Vilken Office-version använder du? Formeln fungerar bra i min Office 2016 och 2013.
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har råkat ut för det här förut - min fix var att jag skrev in formeln i cellen D1 (motsvarande i kalkylbladet jag använde). Vilken cell $D:$1 än motsvarar måste du ange den i cellen nedan - D2. Ber om ursäkt om det inte var därför du fick felet
Denna kommentar minimerades av moderatoren på webbplatsen
Några tips för att få VBA-alternativet att fungera med Excel 2016 för macOS? Jag har följt stegen; men när jag kör makrot händer ingenting alls. Tack!
Denna kommentar minimerades av moderatoren på webbplatsen
Daer Jones,
Vänligen prova nedanstående VBA-kod och låt mig veta om det fungerar för dig. Tack!

Sub CreateUniqueList()
Dim xRng As Range
Dim xLast Row As Long
Dim xLastRow2 As Long
Dim I som heltal
' Vid Fel Resume Next
Set xRng = Application.InputBox("Välj intervall:", "Kutools för Excel", Selection.Address, , , , , 8)
Om xRng är ingenting, avsluta Sub
On Error Resume Next
xRng.Copy Range("D2")
xLastRow = xRng.Rows.Count + 1
ActiveSheet.Range("D2:D" & xLastRow).RemoveDuplicates Columns:=1, Header:=xlNo
xLastRow2 = Cells(Rows.Count, "B").End(xlUp).Row
För I = 1 Till xLastRow2
Om ActiveSheet.Range("D2:D" & xLastRow2).Cells(I).Value = "" Då
ActiveSheet.Range("D2:D" & xLastRow2).Cells(I).Delete
End If
Nästa
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Crystal,
Jag försöker använda VB-versionen av listan med unika värden och stöter på ett problem.
Området som jag vill skapa en unik värdekolumn från är alla formler som refererar till olika flikar.
Hur får man värdet att överföra över istället för formeln?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Mike,
Konvertera dina formelreferenser till absoluta och använd sedan VB-skriptet.
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har samma problem, förutom att min formel hänvisar till kolumnnamn och inte kan konvertera till absolut.
Hur ändrar jag vba för att klistra in värdena och inte formeln?
Denna kommentar minimerades av moderatoren på webbplatsen
Hur skulle du lägga till flera kriterier, till exempel om du bara ville lägga till i den dynamiska listan om datumet bara var 9/12?

Jag försöker "&" i MATCH-formeln, men det fungerar inte.

Till exempel, baserat på ditt exempel:
=FEL(INDEX($B$2:$B$9, MATCH(0 & B4,COUNTIF($D$1:D1, $B$2:$B$9) & $A$2:$A$9, 0)),"" )
Detta skapar ett fel eller skapar dubbletter.

Alternativt har jag läst att "+" kan fungera, även om jag inte kan få det att fungera. Eller använder SMALL.

Idéer?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Zac,
Jag kan tyvärr inte hjälpa till med detta, du kan ställa din fråga i vårt forum: https://www.extendoffice.com/forum.html för att få mer Excel-stöd från vår professionella.
Denna kommentar minimerades av moderatoren på webbplatsen
Hur skulle du lägga till en andra variabel? Till exempel vill jag ha alla unika element i en kolumn som också delar ett liknande värde i en annan kolumn. I ditt exempel, föreställ dig en tredje kolumn med titeln "Avdelning" som skulle ha värden som produkt, kött, etc. Jag inser att de alla är Producera, men förhoppningsvis förstår du min poäng. Skulle du ändra CountIF-formeln till en COUNTIFS eller ändrar du den på annat sätt?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Matt
Försök med den här formeln =IF(ISNA(VLOOKUP(A2,$C$2:$C$13,1,FALSE)),"Ja","").
Antag att de två jämförda listorna är kolumn A och kolumn C. Om de unika värdena bara stannar i kolumn A men inte i kolumn C, kommer det att visas Ja i kolumn B; medan om inget returneras i kolumn B betyder det att motsvarande värde stannar i både kolumn A och kolumn C.
Denna kommentar minimerades av moderatoren på webbplatsen
Tack för svaret .. men varmt att dra ut det unika värdet om det visade JA .. kan du snälla tipsa mig om formeln för att dra det unika värdet i en annan kolumn.
Denna kommentar minimerades av moderatoren på webbplatsen
Om jag gör detta för ett tusen rader excelark på den senaste versionen av Excel på en Mac kommer det aldrig tillbaka. Den första raden fungerar, men när jag duplicerar ner går excel in i ett beräkningsläge som inte har returnerat värden på över två timmar nu.

Några tankar om hur man gör detta för stora listor (upp till 2k rader) som kommer att returnera 50 eller 60 unika värden?

Jag hånade detta i appen "Numbers", och det fungerar perfekt där, det tar bara ett par minuter att beräkna. Det tar bara så lång tid i Excel att jag undrar om det någonsin kommer att bli klart. Jag planerar att låta det "köra" över en natt för att se vad som kommer att hända.
Denna kommentar minimerades av moderatoren på webbplatsen
Kontrollera dina beräkningsalternativ. Den måste ställas in på automatisk. Arkiv > Alternativ > Formler > Beräkningsalternativ > Arbetsboksberäkning (automatiskt val)
Denna kommentar minimerades av moderatoren på webbplatsen
Jag försöker dra ner formeln förbi mina faktiska data så att jag kan mata in olika stora datamängder och inte behöver justera någonting. Den sista raden efter min faktiska data slutar returnerar alltid en "0". Jag använder de unika värdena för något annat i en intilliggande kolumn, och 0:an gör att det sista värdet upprepas (när jag tar bort 0:an upprepas värdet inte längre). Någon idé om hur man fixar detta? Jag använder också Office 365 Business
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, tack för din hjälp.
Nu, hur kan jag få mina värden sorterade i alfabetisk ordning? (Jag vill inte använda filtret på mitt huvudbord)
Ska jag använda en COUNTIFS istället för COUNTIF?
Snälla hjälp
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Alexis,
Jag kan tyvärr inte hjälpa till att sortera det extraherade värdet alfabetiskt samtidigt med formeln. Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Jag använder den där =IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$1:D1, $B$2:$B$9), 0)),"") formel som är bra för en kolumn men mina data är spridda över ett antal kolumner och rader. Kan jag redigera formeln så att den inkluderar hela området? Min data lever från AC4 till AR60...
Denna kommentar minimerades av moderatoren på webbplatsen
Jag provar VBA-koden och formeln. Koden VBA fungerar mycket bra men jag kan inte behålla en fil med makro. Men problemet är att jag inte kan få formeln att fungera. Hade någon en idé? Tack
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Charlotte,
Tack för din kommentar. Du kan behålla filen med makro för framtida användning genom att spara arbetsboken som en Excel-makroaktiverad arbetsbok.
För formelproblemet, skulle du vänligen ge en skärmdump av dina data? Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Tack så mycket
Denna kommentar minimerades av moderatoren på webbplatsen
hur får man vba-koden att fungera för ett intervall där en annan formel användes? i kolumn BI har man en formel som hänvisar till kolumnerna D och E.
Om jag använder applicera koden på kolumn L (låt oss säga), (uppenbarligen, korrekt modifiering av cellerna i koden) returnerar makrot formeln som tillämpas på kolumnerna M och N... Det fungerar alltså, men inte som jag vill! Hur håller man värdena i kolumn B? tack
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har märkt att en 'formule'-metoden fungerar på stora datamängder. Ett bra alternativ är att använda en vridbar. Välj och bara etiketter, du får en lista med unika värden. Det kan vara det som extra får "(leeg)" till exempel. Du kan sedan filtrera detta. Tyvärr är det bara på 1 kriterium filter. Även där är väl återlösningar för, men det är en komplexare.
Denna kommentar minimerades av moderatoren på webbplatsen
Jag skulle vilja kunna göra exakt samma sak, förutom att använda två separata kolumnintervall (B2:B9) samt (D2:D9) är detta möjligt?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Anthony,
Du kan placera resultaten i samma kolumn som originaldata. Som kolumn B i det här fallet.
Men du måste referera till den översta cellen i resultatcellen i formeln enligt följande.
=IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($B$11:B11, $B$2:$B$9), 0)),"") + Ctrl + Shift + Retur
Denna kommentar minimerades av moderatoren på webbplatsen
con este procedimiento de filtro se hace de forma muy rapida

1.EN ESTE EJEMPLO los datos a remover los duplicados estan en la col A de la fila 59 a la 239
2. se define un criterio de filtrado en este caso en la fila d56 el mismo titulo de la lista a remover duplicados y la d57 la dejo en blanco
3. una vez ejecutado se muestran los datos en la fila destino, que en mi caso fue la d59

Range("A59:A239"). AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
("D56:D57"), CopyToRange:=Range("D59"), Unique:=True
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