Wie zähle ich die Anzahl unterschiedlicher Werte in einem Bereich?

32

Ich habe eine große Tabelle, die bereits mit Filtern usw. organisiert ist. Unter bestimmten Spalten möchte ich eine Zusammenfassung einfügen, die die Anzahl der unterschiedlichen Werte in dieser Spalte enthält.

Es gibt keine Funktion. =COUNTDISTINCT(A2:A100)Was kann ich stattdessen tun? (Excel 2003)

Ich kann Antworten auf diese ähnliche Frage nicht genau verwenden, da ich die Tabelle oder die Filterung nicht ändern möchte. Ich brauche eine Ergänzung im Arbeitsblatt, keine Änderung .

Torben Gundtofte-Bruun
quelle

Antworten:

31
=SUMPRODUCT((A2:A100 <> "")/COUNTIF(A2:A100,A2:A100 & ""))

wird es tun, ohne eine Array-Formel verwenden zu müssen.

Lance Roberts
quelle
4
Wie / warum funktioniert das ???
RBarryYoung
4
@RBarryYoung, SUMPRODUCT funktioniert wie eine Array-Funktion, ohne eine zu sein. Während es viel mehr kann als das, wofür es hier verwendet wird, wird hier nur jede Instanz einer Spalte überprüft und ein skalierter Wert für jeden einzelnen Wert basierend auf der Anzahl der Iterationen in der Spalte erstellt. Wenn es also zwei Fälle von 'a' gäbe, würde 1/2 und 1/2 addiert, um 1 zu erhalten. Für jeden einzelnen Wert addieren Sie also einen zur Summe.
Lance Roberts
1
Dies ist der Teil, mit dem ich Probleme habe: "Es wird ein skalierter Wert für jeden einzelnen Wert basierend auf der Anzahl der Iterationen in der Spalte erstellt. " Wenn ich das verstehe, führt SUMPRODUCT effektiv eine Schleife wie for each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }rechts aus ? Ich habe ein wenig Probleme zu verstehen, wie es weiß, sowohl den bedingten als auch den 2. COUNTIF-Parameter aufzuzählen, aber nicht den 1. COUNTIF-Parameter? Wird diese DWIM-Magie irgendwo von MS dokumentiert / erklärt? Es wäre schön zu wissen, wie man diese absichtlich schreibt.
RBarryYoung
1
Ja, Sie haben es verstanden, es iteriert ein Array für einen einzelnen Wert, multipliziert alle seine Parameter (in diesem Fall nur 1) und fügt dann die Iterationen hinzu. SUMPRODUCTs können sehr komplex werden, aber sie sind eine der nützlichsten Funktionen in Excel. Sie können wahre Wunder vollbringen.
Lance Roberts
4
Dies schlägt fehl, wenn die Eingabe leere Einträge enthält. Einfache Lösung als auf demoed youtube ist dies: =SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&"")). Es stellt sicher, dass COUNTIFfür leere Zeilen niemals eine 0 zurückgegeben wird, was zu einem DIV/0Fehler führen würde.
cfi
7

Ich habe hier eine Lösung gefunden, die ein unglaublicher Umweg zu sein scheint, um sie zu lösen. Aber hey, es funktioniert ...

= SUMME (WENN (COUNTIF (A2: A100, A2: A100) = 0, "", 1 / COUNTIF (A2: A100, A2: A100))

und dann Ctrl+ Shift+ drücken Enter. Wenn Sie nur Enterdrücken, erhalten Sie das falsche Ergebnis.

Torben Gundtofte-Bruun
quelle
Ich würde gerne andere Antworten sehen! Gibt es einen besseren Weg, es zu lösen?
Torben Gundtofte-Bruun
1
Nein, das ist der beste Weg. Ich bin mir nicht sicher, warum es dort eine WENN gibt. Sie können einfach das Array = SUM (1 / COUNTIF (A2: A100, A2: A100))
eingeben
2
@dkusleika Die IF scheint da zu sein, um eine Division durch Nullfehler zu verhindern. Wie auf der oben verlinkten Seite erwähnt, ist dies erforderlich, wenn der Bereich leere Zellen enthält, andernfalls können Sie die IF weglassen.
Bavi_H
1

Dieser Artikel zeigt dies für Textwerte:

=SUM(IF(FREQUENCY(IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""), IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""))>0,1))

und dies für numerische Werte:

=SUM(IF(FREQUENCY(C3:C25, C3:C25)>0,1))

Dieser Artikel enthält ähnliche Formeln, zeigt jedoch auch eine Methode mit Filtern.

Zählen Sie die Anzahl der eindeutigen Werte mithilfe eines Filters

Mit dem erweiterten Filter können Sie die eindeutigen Werte aus einer Datenspalte extrahieren und an einer neuen Position einfügen. Anschließend können Sie die ROWS-Funktion verwenden, um die Anzahl der Artikel im neuen Bereich zu zählen.

  1. Stellen Sie sicher, dass die erste Zeile in der Spalte eine Spaltenüberschrift enthält.
  2. Zeigen Sie im Menü Daten auf Filter, und klicken Sie dann auf Erweiterter Filter.
  3. Klicken Sie im Dialogfeld Erweiterter Filter auf An einen anderen Speicherort kopieren.
  4. Wenn der Bereich, den Sie zählen, noch nicht ausgewählt ist, löschen Sie alle Informationen im Feld Listenbereich und klicken Sie dann auf die Spalte (oder wählen Sie den Bereich aus), der Ihre Daten enthält.
  5. Löschen Sie in dem Feld Kopieren nach alle Information in dem Feld, oder klicken Sie in dem Feld, und klicken Sie dann auf eine leere Spalte, in der Sie die eindeutigen Werte kopieren möchten.
  6. Aktivieren Sie das Kontrollkästchen Nur eindeutige Datensätze, und klicken Sie auf OK.

    Die eindeutigen Werte aus dem ausgewählten Bereich werden in die neue Spalte kopiert.

  7. Geben Sie in die leere Zelle unter der letzten Zelle des Bereichs die Funktion ROWS ein. Verwenden Sie den Bereich eindeutiger Werte, den Sie gerade als Argument kopiert haben. Wenn der Bereich eindeutiger Werte beispielsweise B1: B45 ist, geben Sie Folgendes ein:
    = ROWS (B1: B45)

Bis auf weiteres angehalten.
quelle
1

= SUMME (1 / COUNTIF (A2: A100; A2: A100))

Bestätigen Sie mit Strg + Umschalt + Enter

Für jede Zelle wird gezählt, wie oft sie auftritt, und die Umkehrungen aller dieser Werte werden summiert. Angenommen, eine Zeichenfolge oder eine Zahl tritt fünfmal auf. Ihre Inverse ist 0.2, was 5 mal summiert wird, also wird 1 addiert. Am Ende wird die Anzahl der verschiedenen Werte angegeben.

Hinweis: Funktioniert nicht, wenn Leerzeichen auftreten!

user221470
quelle
0

Versuchen Sie diesen Link. Dies zeigt, wie eindeutige Werte in einer Liste gezählt werden, wobei leere Zellen weggelassen werden.

http://www.functioninexcel.com/lists-arrays/count-unique-values-in-a-list/

= Summe (wenn (Häufigkeit (Übereinstimmung (Liste, Liste, 0), Übereinstimmung (Liste, Liste, 0))> 0, 1))

Wobei "Liste" Ihr Zellenbereich ist, zum Beispiel:

Liste = $ A $ 2: $ A $ 12 ODER- Liste = Versatz ($ A $ 1 ,,, Übereinstimmung (Wiederholung ("z", 255), $ A: $ A)) ODER- Liste = Versatz ($ A $ 1, ,, match (value (rept ("9", 255)), $ A: $ A))

Charles Hunt
quelle
0

= SUMME (WENN (FREQUENZ (WENN (ZWISCHENSUMME (3, OFFSET (A2: A100, REIHE (A2: A100) -REIHE (A2), 0,1)), SPIEL ("~" & A2: A100, A2: A100 & " ", 0)), ROW (A2: A100) -ROW (A2) +1), 1))

Stellen Sie sicher, dass Sie STRG + UMSCHALT + EINGABETASTE drücken, nachdem Sie diese Formel eingefügt haben. Dies gilt für einen Bereich von A2: A100. Passen Sie den Bereich entsprechend an.

Vlada
quelle