Abrufen eindeutiger Werte in Excel nur mithilfe von Formeln


75

Kennen Sie eine Möglichkeit in Excel, eine Liste eindeutiger Werte anhand einer Formel zu "berechnen"?

Zum Beispiel: ein vertikaler Bereich enthält Werte "red", "blue", "red", "green", "blue", und ich als Ergebnis haben will , , , + schließlich 2 weitere leere Zellen. "black"
"red"blue""green""black"

Ich habe bereits einen Weg gefunden, eine berechnete sortierte Liste mit SMALL oder LARGE in Kombination mit INDEX zu erhalten, aber ich möchte diese berechnete Sortierung auch ohne Verwendung von VBA haben.


Wie sollen die Daten zurückgegeben werden? Ich denke, die meisten (alle?) Formeln geben Werte zurück, keine Listen ...
Arkady

@scrible: Mithilfe einer Array-Formel können Sie ein Array von Zellen zurückerhalten.
Patrick Honorez

Wenn Sie in Spalte B die Position $ A11 in $ A12 ändern, erhalten Sie als schnelle Änderung des vorherigen Beitrags eine einzige Kopie jedes Werts, einschließlich doppelter Werte, jedoch nur einmal !! :)

2
Viele Jahre später wird endlich eine integrierte Lösung implementiert.
GSerg

@GSerg 8-) MS hat vielleicht beschlossen, einige nützliche hinzuzufügen, die schon lange in GSheets verfügbar sind!
Patrick Honorez

Antworten:


29

Dies ist ein Oldie, und es gibt einige Lösungen, aber ich habe eine kürzere und einfachere Formel gefunden als jede andere, die mir begegnet ist, und sie könnte für jeden nützlich sein, der vorbeikommt.

Ich habe die Farbliste Colors(A2: A7) benannt, und die in Zelle C2 eingefügte Array-Formel lautet wie folgt ( fest ):

=IFERROR(INDEX(Colors,MATCH(SUM(COUNTIF(C$1:C1,Colors)),COUNTIF(Colors,"<"&Colors),0)),"")

Verwenden Sie Ctrl+Shift+Enterdiese Option , um die Formel in C2 einzugeben und C2 nach C3: C7 zu kopieren .

Erklärung mit Beispieldaten {"rot"; "Blau"; "rot"; "Grün"; "Blau"; "schwarz"}:

  1. COUNTIF(Colors,"<"&Colors)Gibt ein Array (# 1) mit der Anzahl der Werte zurück, die kleiner sind als jedes Element in den Daten {4; 1; 4; 3; 1; 0} (schwarz = 0 Elemente kleiner, blau = 1 Element, rot = 4 Elemente ). Dies kann für jeden Artikel in einen Sortierwert übersetzt werden .
  2. COUNTIF(C$1:C...,Colors)Gibt für jedes Datenelement, das bereits im sortierten Ergebnis enthalten ist, ein Array (# 2) mit 1 zurück. In C2 wird {0; 0; 0; 0; 0; 0} und in C3 {0; 0; 0; 0; 0; 1} zurückgegeben, da "schwarz" zuerst in der Sortierung und zuletzt in den Daten steht. In C4 {0; 1; 0; 0; 1; 1} zeigt es "schwarz" an und alle Vorkommen von "blau" sind bereits vorhanden.
  3. Der SUMgibt den k-ten Sortierwert zurück, indem alle bereits vorhandenen kleineren Werte gezählt werden (Summe von Array # 2).
  4. MATCH findet den ersten Index des k-ten Sortierwerts (Index in Array # 1).
  5. Dies IFERRORdient nur dazu, den #N/AFehler in den unteren Zellen auszublenden , wenn die sortierte eindeutige Liste vollständig ist.

Um zu wissen, wie viele einzigartige Gegenstände Sie haben, können Sie diese reguläre Formel verwenden :

=SUM(IF(FREQUENCY(COUNTIF(Colors,"<"&Colors),COUNTIF(Colors,"<"&Colors)),1))

1
Kleiner "Fehler" im Randfall: Wenn die Originaldaten Leerzeichen enthalten. Kann durch Hinzufügen IF(ISBLANK(Colors), 0,1)zum Array Nr. 1 und zum Array gelöst werden SUM().
AviD

@ AviD, Hallo zusammen. Könnten Sie helfen zu klären, ob es leere Werte gibt? Im Moment gibt mein Formel-Array den ersten Wert für das gesamte Array zurück. Vielen Dank
Freelancer

Ich bin mir nicht sicher, ob ich diese Lösung verstehe. Screenshot-Beispiele wären hilfreich.
Stevoisiak

@dePatinkin Es funktioniert für mich, aber ich muss das erste Element in der Liste hart codieren, andernfalls werden alle Elemente, die mit A beginnen, ignoriert. Haben Sie eine Lösung, um bestimmte Elemente in der Liste zu ignorieren? (z. B. Mitarbeiter nicht zurückgeben)
Dumitru Daniel

1
@DumitruDaniel Es liegt wahrscheinlich daran, dass Sie "A" als Spaltenüberschrift geschrieben haben C1. Der Header sollte keinem der Werte entsprechen. Das Filtern der Liste ist ein anderes Problem mit einer anderen Lösung. Öffnen Sie daher möglicherweise eine Frage. Wenn Sie es nicht sortiert benötigen, können Sie eine Formel wie diese verwenden =IFERROR(INDEX(Colors,MATCH(0,COUNTIF(C$1:C1,Colors)+(Colors="blue"),0)),"").
dePatinkin

53

Ok, ich habe zwei Ideen für dich. Hoffentlich bringt Sie einer von ihnen dahin, wo Sie hin müssen. Beachten Sie, dass der erste die Aufforderung ignoriert, dies als Formel zu tun, da diese Lösung nicht hübsch ist. Ich dachte, ich stelle sicher, dass der einfache Weg für dich wirklich nicht funktioniert; ^).

Verwenden Sie den Befehl Erweiterter Filter

  1. Wählen Sie die Liste aus (oder platzieren Sie Ihre Auswahl an einer beliebigen Stelle in der Liste und klicken Sie auf OK, wenn das Dialogfeld angezeigt wird, in dem Sie sich beschweren, dass Excel nicht weiß, ob Ihre Liste Überschriften enthält oder nicht).
  2. Wählen Sie Daten / Erweiterter Filter
  3. Wählen Sie entweder "Liste direkt filtern" oder "An einen anderen Ort kopieren".
  4. Klicken Sie auf "Nur eindeutige Datensätze".
  5. OK klicken
  6. Du bist fertig. Eine eindeutige Liste wird entweder an Ort und Stelle oder an einem neuen Ort erstellt. Beachten Sie, dass Sie diese Aktion aufzeichnen können, um ein einzeiliges VBA-Skript zu erstellen, das dann möglicherweise verallgemeinert wird, um in anderen Situationen für Sie zu arbeiten (z. B. ohne die oben aufgeführten manuellen Schritte).

Verwenden von Formeln (Beachten Sie, dass ich auf der Locksfree-Lösung aufbaue, um eine Liste ohne Löcher zu erhalten.)

Diese Lösung funktioniert mit den folgenden Einschränkungen:

  • Die Liste muss sortiert sein (aufsteigend oder absteigend spielt keine Rolle). Eigentlich ist das ziemlich genau, da die Anforderung wirklich ist, dass alle ähnlichen Elemente zusammenhängend sein müssen, aber das Sortieren ist der einfachste Weg, um diesen Zustand zu erreichen.
  • Es sind drei neue Spalten erforderlich (zwei neue Spalten für Berechnungen und eine neue Spalte für die neue Liste). Die zweite und dritte Spalte könnten kombiniert werden, aber das überlasse ich dem Leser als Übung.

    Hier ist die Zusammenfassung der Lösung:

    1. Berechnen Sie für jedes Element in der Liste die Anzahl der darüber liegenden Duplikate.
    2. Berechnen Sie für jede Stelle in der eindeutigen Liste den Index des nächsten eindeutigen Elements.
    3. Verwenden Sie schließlich die Indizes, um eine neue Liste mit nur eindeutigen Elementen zu erstellen.

    Und hier ein schrittweises Beispiel:

    1. Öffnen Sie eine neue Tabelle
    2. Geben Sie in a1: a6 das in der ursprünglichen Frage angegebene Beispiel ein ("rot", "blau", "rot", "grün", "blau", "schwarz").
    3. Liste sortieren: Fügen Sie die Auswahl in die Liste ein und wählen Sie den Befehl sort.
    4. Berechnen Sie in Spalte B die Duplikate:
      1. Geben Sie in B1 "= IF (COUNTIF ($ A $ 1: A1, A1) = 1,0, COUNTIF (A1: $ A $ 6, A1))" ein. Beachten Sie, dass das "$" in den Zellreferenzen sehr wichtig ist, da dies den nächsten Schritt (Auffüllen des Restes der Spalte) erheblich erleichtert. Das "$" gibt eine absolute Referenz an, sodass die Referenz beim Kopieren / Einfügen des Zelleninhalts nicht aktualisiert wird (im Gegensatz zu einer relativen Referenz, die aktualisiert wird).
      2. Verwenden Sie Smart Copy, um den Rest der Spalte B zu füllen: Wählen Sie B1. Bewegen Sie die Maus über das schwarze Quadrat in der unteren rechten Ecke der Auswahl. Klicken und ziehen Sie zum Ende der Liste (B6). Wenn Sie loslassen, wird die Formel mit den aktualisierten relativen Referenzen in B2: B6 kopiert.
      3. Der Wert von B1: B6 sollte jetzt "0,0,1,0,0,1" sein. Beachten Sie, dass die Einträge "1" Duplikate anzeigen.
    5. Erstellen Sie in Spalte C einen Index eindeutiger Elemente:
      1. Geben Sie in C1 "= Row ()" ein. Sie möchten wirklich nur C1 = 1, aber die Verwendung von Row () bedeutet, dass diese Lösung auch dann funktioniert, wenn die Liste nicht in Zeile 1 beginnt.
      2. Geben Sie in C2 "= IF (C1 + 1 <= ROW ($ B $ 6), C1 + 1 + INDEX ($ B $ 1: $ B $ 6, C1 + 1), C1 + 1)" ein. Das "if" wird verwendet, um zu verhindern, dass ein #REF erzeugt wird, wenn der Index das Ende der Liste erreicht.
      3. Verwenden Sie Smart Copy, um C3: C6 zu füllen.
      4. Der Wert von C1: C6 sollte "1,2,4,5,7,8" sein.
    6. Erstellen Sie in Spalte D die neue eindeutige Liste:
      1. Geben Sie in D1 "= IF (C1 <= ROW ($ A $ 6), INDEX ($ A $ 1: $ A $ 6, C1)," ")" ein. Und das "if" wird verwendet, um den # REF-Fall zu stoppen, wenn der Index über das Ende der Liste hinausgeht.
      2. Verwenden Sie Smart Copy, um D2: D6 zu füllen.
      3. Die Werte von D1: D6 sollten jetzt "schwarz", "blau", "grün", "rot", "", "" sein.

    Hoffe das hilft....


  • hmmm, stellt sich als Fehler in meiner Lösung heraus. Es funktioniert nicht für eine Liste wie "schwarz, schwarz, blau, blau, pink, gelb". Sollte es reparieren können, aber ich muss zuerst ein wenig arbeiten; ^). Ich werde in Kürze aktualisieren.
    Drew Sherman

    ok, die Lösung wurde repariert und ich glaube jetzt, dass sie in allen Fällen funktioniert. Oben an Ort und Stelle bearbeitet.
    Drew Sherman

    Das scheint eine gültige Lösung zu sein. In der Zwischenzeit hatte ich mit den Funktionen LARGE oder SMALL zuerst etwas gefunden, um die Elemente zu sortieren. Aber meine Lösung funktioniert nur mit Zahlen.
    Patrick Honorez

    Einige Einschränkungen, auf die ich bei der Implementierung gestoßen bin: In Schritt 5.1 sollte C1 unabhängig von der Startposition der Liste gleich 1 sein. Auf diese Weise haben Sie immer die richtige relative Position für den von Ihnen verwendeten Linienbereich. Und das IFin Schritt 6.1 verwendete funktioniert nur, wenn Sie einen engen Bereich auswählen. Ich habe eine neue Antwort mit einem verbesserten Algorithmus gegeben, der diese Probleme nicht hat und keine zusammenhängende oder sortierte Eingabeliste benötigt.
    ReneSac

    22

    Lösung

    Ich habe eine Funktion in VBA für Sie erstellt, damit Sie dies jetzt auf einfache Weise tun können.
    Erstellen Sie ein VBA-Codemodul (Makro), wie Sie in diesem Lernprogramm sehen können .

    1. Drücken Sie Alt+F11
    2. Klicken Sie , um Modulein Insert.
    3. Code einfügen.
    4. Wenn Excel angibt, dass Ihr Dateiformat nicht makrofreundlich ist, speichern Sie es wie Excel Macro-Enabledin Save As.

    Quellcode

    Function listUnique(rng As Range) As Variant
        Dim row As Range
        Dim elements() As String
        Dim elementSize As Integer
        Dim newElement As Boolean
        Dim i As Integer
        Dim distance As Integer
        Dim result As String
    
        elementSize = 0
        newElement = True
    
        For Each row In rng.Rows
            If row.Value <> "" Then
                newElement = True
                For i = 1 To elementSize Step 1
                    If elements(i - 1) = row.Value Then
                        newElement = False
                    End If
                Next i
                If newElement Then
                    elementSize = elementSize + 1
                    ReDim Preserve elements(elementSize - 1)
                    elements(elementSize - 1) = row.Value
                End If
            End If
        Next
    
        distance = Range(Application.Caller.Address).row - rng.row
    
        If distance < elementSize Then
            result = elements(distance)
            listUnique = result
        Else
            listUnique = ""
        End If
    End Function
    

    Verwendung

    Betreten Sie einfach =listUnique(range)eine Zelle. Der einzige Parameter rangeist ein gewöhnlicher Excel-Bereich. Zum Beispiel: A$1:A$28oder H$8:H$30.

    Bedingungen

    • Das rangemuss eine Spalte sein.
    • Die erste Zelle, in der Sie die Funktion aufrufen, muss sich in derselben Zeile befinden, in der die Funktion rangebeginnt.

    Beispiel

    Normalfall

    1. Daten eingeben und Funktion aufrufen.
      Daten eingeben und Funktion aufrufen
    2. Lass es wachsen.
      Lass es wachsen
    3. Voilà.
      Voilà

    Leerer Zellenkasten

    Es funktioniert in Spalten mit leeren Zellen. Außerdem gibt die Funktion nichts aus (keine Fehler), wenn Sie die Zellen (Aufruf der Funktion) an Stellen überwickeln, an denen keine Ausgabe erfolgen soll, wie ich es im vorherigen Teil "2. Grow it" getan habe.

    Leerer Zellenkasten


    4
    Vielen Dank an @totymedli. Meine Frage war, es OHNE VBA zu tun.
    Patrick Honorez

    1
    @ iDevlop Sry hat das nicht gesehen. Eigentlich habe ich das für einen Freund gemacht, dachte nur, es könnte dir helfen.
    Totymedli

    1
    Großartig, wenn es funktioniert, aber Excel bei großen Datenmengen gelegentlich umkippt.
    Jamie Bull

    Sehr hilfreich, aber Excel benötigt jedes Mal zu viel Zeit, wenn neue Daten zur Liste hinzugefügt werden. Ich hoffe, wenn einige Optimierungen vorgenommen werden, wird es hervorragend sein.
    Adarsh ​​Madrecha

    Großartig, funktioniert aber nicht, wenn der Bereich am Ende leere Zellen enthält. = (Auch diese Funktion funktioniert nicht für die Erstellung von ComboBox in Zelle. = (
    Andrew

    17

    Ein Umweg besteht darin, Ihre Excel-Tabelle in eine Google-Tabelle zu laden, die EINZIGARTIGE Funktion (Bereich) von Google zu verwenden, die genau das tut, was Sie möchten, und die Google-Tabelle dann wieder im Excel-Format zu speichern.

    Ich gebe zu, dass dies keine praktikable Lösung für Excel-Benutzer ist, aber dieser Ansatz ist nützlich für alle, die die Funktionalität nutzen möchten und eine Google-Tabelle verwenden können.


    Nicht gerade eine Antwort, trotzdem interessant. Vielen Dank
    Patrick Honorez

    Ja, wie gesagt, nicht für Excel-Benutzer geeignet, aber hilfreich für Google-Tabellenkalkulationsbenutzer mit derselben Frage.
    Yooy

    Am wichtigsten ist, dass eine Formel automatisch aktualisiert wird, dies jedoch nicht.
    sancho.s ReinstateMonicaCellio

    3
    EINZIGARTIG ist eine Formel und wird wie jede andere automatisch aktualisiert.
    Jojo

    3

    Es ist eine sehr alte Frage, aber die Leute scheinen immer noch Probleme damit zu haben, eine Formel zum Extrahieren einzigartiger Gegenstände zu verwenden. Hier ist eine Lösung, die die Werte zurückgibt, die sie selbst haben.

    Nehmen wir an, Sie haben "rot", "blau", "rot", "grün", "blau", "schwarz" in Spalte A2: A7

    Fügen Sie dies dann als Array-Formel in B2 ein und kopieren Sie es nach unten =IFERROR(INDEX(A$2:A$7;SMALL(IF(FREQUENCY(MATCH(A$2:A$7;A$2:A$7;0);ROW(INDIRECT("1:"&COUNTA(A$2:A$7))));ROW(INDIRECT("1:"&COUNTA(A$2:A$7)));"");ROW(A1)));"")

    dann sollte es ungefähr so ​​aussehen; Geben Sie hier die Bildbeschreibung ein


    3

    Selbst um einen sortierten eindeutigen Wert zu erhalten, kann dies mithilfe einer Formel erfolgen. Dies ist eine Option, die Sie verwenden können:

    =INDEX($A$2:$A$18,MATCH(SUM(COUNTIF($A$2:$A$18,C$1:C1)),COUNTIF($A$2:$A$18,"<" &$A$2:$A$18),0))
    

    Bereichsdaten: A2:A18

    Formel in der Zelle C2

    Dies ist eine ARRAY-FORMEL


    3

    Versuchen Sie diese Formel in B2Zelle

    =IFERROR(INDEX($A$2:$A$7,MATCH(0,COUNTIF(B$1:$B1,$A$2:$A$7),0),1),"")
    

    Nach dem Klicken F2und drücken Sie Ctrl+ Shift+Enter

    Geben Sie hier die Bildbeschreibung ein


    2

    Sie können COUNTIF verwenden, um die Häufigkeit des Auftretens des Werts im Bereich abzurufen. Wenn der Wert in A3 liegt, ist der Bereich A1: A6, und verwenden Sie in der nächsten Spalte ein IF (EXACT (COUNTIF (A3: $ A $ 6, A3), 1), A3, ""). Für den A4 wäre es WENN (GENAU (COUNTIF (A4: $ A $ 6, A3), 1), A4, "")

    Dies würde Ihnen eine Spalte geben, in der alle eindeutigen Werte ohne Duplikat sind


    2

    Angenommen, Spalte A enthält die Werte, für die Sie eine einzelne eindeutige Instanz suchen möchten, und hat eine Überschriftenzeile. Ich habe die folgende Formel verwendet. Wenn Sie möchten, dass es mit einer unvorhersehbaren Anzahl von Zeilen skaliert, können Sie A772 (wo meine Daten endeten) durch = ADRESSE (COUNTA (A: A), 1) ersetzen .

    = IF (COUNTIF (A5: $ A $ 772, A5) = 1, A5, "")

    Dadurch wird der eindeutige Wert an der LETZTEN Instanz jedes Werts in der Spalte angezeigt und es wird keine Sortierung angenommen. Es nutzt den Mangel an Absoluten aus, um im Wesentlichen ein abnehmendes "Schiebefenster" von zu zählenden Daten zu haben. Wenn der Countif im reduzierten Fenster gleich 1 ist, ist diese Zeile die letzte Instanz dieses Werts in der Spalte.


    1

    Drew Shermans Lösung ist sehr gut, aber die Liste muss zusammenhängend sein (er schlägt vor, manuell zu sortieren, und das ist für mich nicht akzeptabel). Die Lösung von Guitarthrower ist etwas langsam, wenn die Anzahl der Elemente groß ist und die Reihenfolge der ursprünglichen Liste nicht berücksichtigt: Sie gibt unabhängig davon eine sortierte Liste aus.

    Ich wollte die ursprüngliche Reihenfolge der Elemente (die nach dem Datum in einer anderen Spalte sortiert waren), und außerdem wollte ich ein Element nicht nur aus der endgültigen Liste ausschließen, wenn es dupliziert wurde, sondern auch aus verschiedenen anderen Gründen.

    Meine Lösung ist eine Verbesserung gegenüber Drew Shermans Lösung. Ebenso verwendet diese Lösung 2 Spalten für Zwischenberechnungen:

    Spalte A:

    Die Liste mit Duplikaten und möglicherweise Leerzeichen, die Sie filtern möchten. Ich werde es als Beispiel im Intervall A11: A1100 positionieren, da ich Probleme hatte, die Lösung des Drew Sherman in Situationen zu verschieben, in denen sie nicht in der ersten Zeile begann.

    Spalte B:

    Diese Formel gibt 0 aus, wenn der Wert in dieser Zeile gültig ist (enthält einen nicht duplizierten Wert). Beachten Sie, dass Sie in der ersten IF oder einer weiteren äußeren IF beliebige andere Ausschlussbedingungen hinzufügen können.

    =IF(ISBLANK(A11);1;IF(COUNTIF($A$11:A11;A11)=1;0;COUNTIF($A11:A$1100;A11)))
    

    Verwenden Sie Smart Copy, um die Spalte zu füllen.

    Spalte C:

    In der ersten Zeile finden wir die erste gültige Zeile:

    =MATCH(0;B11:B1100;0)
    

    Von dieser Position aus suchen wir nach dem nächsten gültigen Wert mit der folgenden Formel:

    =C11+MATCH(0;OFFSET($B$11:$B$1100;C11;0);0)
    

    Setzen Sie es in die zweite Zeile und füllen Sie den Rest der Spalte mit Smart Copy. Diese Formel gibt den Fehler # N / D aus, wenn keine eindeutigen Punkte mehr angezeigt werden. Wir werden dies in der nächsten Spalte nutzen.

    Spalte D:

    Jetzt müssen wir nur noch die Werte in Spalte C anzeigen:

    =IFERROR(INDEX($A$11:$A$1100; C11); "")
    

    Verwenden Sie Smart Copy, um die Spalte zu füllen. Dies ist die eindeutige Ausgabeliste.


    1

    Sie können es auch so machen.

    Erstellen Sie die folgenden benannten Bereiche:

    nList = the list of original values
    nRow = ROW(nList)-ROW(OFFSET(nList,0,0,1,1))+1
    nUnique = IF(COUNTIF(OFFSET(nList,nRow,0),nList)=0,COUNTIF(nList, "<"&nList),"")
    

    Mit diesen 3 benannten Bereichen können Sie die geordnete Liste eindeutiger Werte mit der folgenden Formel generieren. Es wird in aufsteigender Reihenfolge sortiert.

    IFERROR(INDEX(nList,MATCH(SMALL(nUnique,ROW()-?),nUnique,0)),"")
    

    Sie müssen die Zeilennummer der Zelle direkt über dem ersten Element Ihrer eindeutigen geordneten Liste durch das '?' Charakter.

    z.B. Wenn Ihre eindeutige geordnete Liste in Zelle B5 beginnt, lautet die Formel:

    IFERROR(INDEX(nList,MATCH(SMALL(nUnique,ROW()-4),nUnique,0)),"")
    

    1

    Ich bin überrascht, dass diese Lösung noch nicht gefunden wurde. Ich denke, es ist eines der einfachsten

    Geben Sie Ihren Daten eine Überschrift und fügen Sie sie in einen dynamischen benannten Bereich ein (dh wenn Ihre Daten in Spalte sind A).

    =OFFSET($A$2,0,0,COUNTA($A:$A),1)
    

    Erstellen Sie anschließend eine Pivot-Tabelle, und machen Sie die Quelle zu Ihrem benannten Bereich.

    Wenn Sie die Überschrift einfach in den Zeilenabschnitt einfügen, erhalten Sie die eindeutigen Werte. Sortieren Sie nach Belieben mit der integrierten Funktion.


    1

    Ich habe das, was ich verwende, in meine Excel-Datei unten eingefügt. Dadurch werden eindeutige Werte aus dem Bereich L11:L300erfasst und ab Spalte V, V11 ausgefüllt. In diesem Fall habe ich diese Formel in Version 11 und ziehe sie nach unten, um alle eindeutigen Werte zu erhalten.

    =INDEX(L$11:L$300,MATCH(0,COUNTIF(V$10:V10,L$11:L$300),0))
    

    oder

    =INDEX(L$11:L$300,MATCH(,COUNTIF(V$10:V10,L$11:L$300),))
    

    Dies ist eine Array-Formel


    Ich habe es versucht, aber COUNTIF scheint nicht mit einem Bereich als zweitem Argument in Excel 2010 zu arbeiten.
    Ellen Spertus

    Weitere Informationen zu diesem Ansatz finden Sie hier - exceljet.net/formula/extract-unique-items-from-a-list .
    Yooy

    1

    Der Rückgriff auf eine PivotTable zählt möglicherweise nicht nur zur Verwendung von Formeln, sondern scheint praktischer zu sein als die meisten anderen Vorschläge bisher:

    SO1429899 Beispiel


    0

    Ich bin kürzlich auf dasselbe Problem gestoßen und habe es endlich herausgefunden.

    Unter Verwendung Ihrer Liste finden Sie hier eine Einfügung aus meinem Excel mit der Formel.

    Ich empfehle, die Formel irgendwo in die Mitte der Liste zu schreiben, z. B. in die Zelle C6meines Beispiels, und sie dann zu kopieren und in Ihre Spalte einzufügen. Die Formel sollte automatisch angepasst werden, ohne dass Sie sie erneut eingeben müssen.

    Die einzige Zelle mit einer eindeutig anderen Formel befindet sich in der ersten Zeile.

    Verwenden Sie Ihre Liste ("rot", "blau", "rot", "grün", "blau", "schwarz"); Hier ist das Ergebnis: ( Ich habe nicht genug Level, um ein Bild zu posten, also hoffe, diese txt-Version macht Sinn )

    • [Spalte A: Originalliste]
    • [Spalte B: Ergebnis der eindeutigen Liste]
    • [Spalte C: Einzigartige Listenformel]

      1. rot rot, =A3
      2. Blau Blau, =IF(ISERROR(MATCH(A4,A$3:A3,0)),A4,"")
      3. rot, , =IF(ISERROR(MATCH(A5,A$3:A4,0)),A5,"")
      4. Grün Grün, =IF(ISERROR(MATCH(A6,A$3:A5,0)),A6,"")
      5. Blau, , =IF(ISERROR(MATCH(A7,A$3:A6,0)),A7,"")
      6. Schwarz Schwarz, =IF(ISERROR(MATCH(A8,A$3:A7,0)),A8,"")

    0

    Dies funktioniert nur, wenn die Werte in der richtigen Reihenfolge sind, dh alle "roten" und alle "blauen" zusammen sind usw. Nehmen Sie an, dass sich Ihre Daten in Spalte A ab A2 befinden - (Beginnen Sie nicht mit Zeile 1) B2 Geben Sie 1 ein. In b3 geben Sie = if (A2 = A3, B2, B2 + 1) ein. Ziehen Sie die Formel nach unten, bis das Ende Ihrer Daten erreicht ist. Alle "Rot" ist 1, alle "Blau" sind 2, alle "Grün" 3 sein usw.

    Geben Sie in C2 1, 2, 3 usw. in die Spalte ein. In D2 = OFFSET ($ A $ 1, MATCH (c2, $ B $ 2: $ B $ x, 0), 0) - wobei x die letzte Zelle ist Es werden nur die eindeutigen Werte angezeigt. - Fehlerprüfung durchführen


    0

    Für eine Lösung, die für Werte in mehreren Zeilen und Spalten funktioniert, fand ich die folgende Formel sehr nützlich: http://www.get-digital-help.com/2009/03/16/unique-values-from-multiple- Spalten-mit-Array-Formeln / Oscar unter get-digital.help.com gehen es sogar Schritt für Schritt und mit einem visualisierten Beispiel durch.

    1) Geben Sie dem Wertebereich die Bezeichnung tbl_text

    2) Wenden Sie die folgende Array-Formel mit STRG + UMSCHALT + EINGABETASTE in diesem Fall auf Zelle B13 an. Ändern Sie $ B $ 12: B12, um auf die Zelle über der Zelle zu verweisen, in die Sie diese Formel eingeben.

        =INDEX(tbl_text, MIN(IF(COUNTIF($B$12:B12, tbl_text)=0, ROW(tbl_text)-MIN(ROW(tbl_text))+1)), MATCH(0, COUNTIF($B$12:B12, INDEX(tbl_text, MIN(IF(COUNTIF($B$12:B12, tbl_text)=0, ROW(tbl_text)-MIN(ROW(tbl_text))+1)), , 1)), 0), 1)
    

    3) Kopieren / ziehen Sie nach unten, bis Sie N / A erhalten.


    0

    Wenn man alle Daten in die gleichen Spalten setzt und die folgende Formel verwendet Beispielformel: =IF(C105=C104,"Duplicate","Not a Duplicate")

    Schritte

    1. Sortieren Sie die Daten
    2. Spalte für die Formel hinzufügen
    3. Überprüft, ob die Zelle der darüber liegenden Zelle entspricht
    4. Dann filtern Not a Duplicate
    5. Optional: Kopieren Sie die von der Formelspalte berechneten Daten und fügen Sie sie nur als Werte ein (auf diese Weise werden beim Löschen von Daten keine Fehler angezeigt
    6. HINWEIS / WARNUNG: Dies funktioniert nur, wenn Sie die Daten zuerst sortieren

    Beispielformel: =IF(C105=C104,"Duplicate","Not a Duplicate")


    0

    Optimierte VBScript-Lösung

    Ich habe Totymedlis Code verwendet, aber festgestellt, dass er bei der Verwendung großer Bereiche (wie von anderen hervorgehoben) festgefahren ist, und habe seinen Code ein wenig optimiert. Wenn jemand daran interessiert ist, eindeutige Werte mit VBScript zu erhalten, der Code von totymedli jedoch beim Aktualisieren langsam ist, versuchen Sie Folgendes:

        Function listUnique(rng As Range) As Variant
            Dim val As String
            Dim elements() As String
            Dim elementSize As Integer
            Dim newElement As Boolean
            Dim i As Integer
            Dim distance As Integer
            Dim allocationChunk As Integer
            Dim uniqueSize As Integer
            Dim r As Long
            Dim lLastRow  As Long
    
            lLastRow = rng.End(xlDown).row
    
            elementSize = 1
            unqueSize = 0
    
            distance = Range(Application.Caller.Address).row - rng.row
    
            If distance <> 0 Then
                If Cells(Range(Application.Caller.Address).row - 1, Range(Application.Caller.Address).Column).Value = "" Then
                    listUnique = ""
                    Exit Function
                End If
            End If
    
            For r = 1 To lLastRow
                val = rng.Cells(r)
                If val <> "" Then
                    newElement = True
                    For i = 1 To elementSize - 1 Step 1
                        If elements(i - 1) = val Then
                            newElement = False
                            Exit For
                        End If
                    Next i
                    If newElement Then
                        uniqueSize = uniqueSize + 1
                        If uniqueSize >= elementSize Then
                            elementSize = elementSize * 2
                            ReDim Preserve elements(elementSize - 1)
                        End If
                        elements(uniqueSize - 1) = val
                    End If
                End If
            Next
    
    
            If distance < uniqueSize Then
                listUnique = elements(distance)
            Else
                listUnique = ""
            End If
        End Function
    

    Die Frage ist für VBA, nicht für vbScript, und NUR FÜR FORMEL.
    Patrick Honorez

    0

    Einfache Formellösung: Verwenden dynamischer Array-Funktionen (UNIQUE-Funktion)

    Seit Herbst 2018 enthalten die Abonnementversionen von Microsoft Excel (Office 365 / Microsoft 365-App) sogenannte dynamische Array-Funktionen (in nicht abonnierten Versionen für Office 2016/2019 noch nicht verfügbar).

    EINZIGARTIGE Funktion

    Eine dieser Funktionen ist die UNIQUEFunktion, die ein Array eindeutiger Werte für den ausgewählten Bereich liefert.

    Beispiel

    Im folgenden Beispiel liegen die Eingabewerte im Bereich A1:A6. Die UNIQUEFunktion wird in die Zelle eingegeben C1.

    =UNIQUE(A1:A6)
    

    Einfache Lösung zum Anzeigen eindeutiger Werte in Excel mithilfe dynamischer Array-Funktionen

    Wie Sie sehen können, wird die UNIQUEFunktion automatisch über den erforderlichen Zellenbereich übertragen, um alle eindeutigen Werte anzuzeigen. Dies wird durch den dünnen, blauen Rahmen angezeigt C1:C4.

    Gut zu wissen

    Da die UNIQUEFunktion automatisch die erforderliche Anzahl von Zeilen überschreitet, sollten Sie genügend Platz unter dem lassen C1. Wenn nicht genügend Speicherplatz vorhanden ist, wird eine #SPILLFehlermeldung angezeigt.

    Dynamische Array-Funktionen: Überlauf nicht möglich, da ein Wert in C3 den Überlaufbereich blockiert

    Wenn Sie auf die Ergebnisse der UNIQUEFunktion verweisen möchten , können Sie einfach auf die Zelle verweisen, die die UNIQUEFunktion enthält, und ein Hash- #Zeichen hinzufügen .

    =C1#
    

    Es ist auch möglich, eindeutige Werte in mehreren Spalten zu überprüfen . In diesem Fall liefert die UNIQUE-Funktion alle Zeilen, in denen die Kombination der Zellen in der Zeile eindeutig ist:

    Anwenden der UNIQUE-Funktion auf mehrere Spalten

    Wenn Sie eindeutige Spalten anstelle von eindeutigen Zeilen anzeigen möchten , müssen Sie das [by_col]Argument auf setzen TRUE(Standard ist FALSE, dass Sie eindeutige Zeilen erhalten).

    Sie können auch Werte anzeigen, die genau einmal angezeigt werden, indem Sie das [exactly_once]Argument auf Folgendes setzen TRUE:

    =UNIQUE(A1:A6;;TRUE)
    

    Zeigen Sie eindeutige Werte an, die genau einmal angezeigt werden


    -1

    Wählen Sie die Spalte mit den doppelten Werten aus und gehen Sie zur Registerkarte "Daten". Wählen Sie dann "Datentools" die Option "Doppelte entfernen". 1) "Fahren Sie mit der aktuellen Auswahl fort." 2) Klicken Sie auf die Schaltfläche "Doppelte entfernen ....". 3) Klicken Sie auf die Schaltfläche "Alle auswählen". 4) Klicken Sie auf in Ordnung

    Jetzt erhalten Sie die eindeutige Werteliste.

    Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
    Licensed under cc by-sa 3.0 with attribution required.