Jak policzyć liczbę różnych wartości w zakresie?

32

Mam dużą tabelę, która jest już zorganizowana za pomocą filtrów itp. Chciałbym dodać podsumowanie pod pewnymi kolumnami, które zawierają liczbę różnych wartości w tej kolumnie.

Nie ma żadnej funkcji, =COUNTDISTINCT(A2:A100)więc co mogę zamiast tego zrobić? (Excel 2003)

Nie mogę dokładnie użyć odpowiedzi na to podobne pytanie, ponieważ nie chcę modyfikować tabeli ani filtrowania. Potrzebuję dodatku w arkuszu, a nie modyfikacji .

Torben Gundtofte-Bruun
źródło

Odpowiedzi:

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

zrobi to bez konieczności używania formuły tablicowej.

Lance Roberts
źródło
4
Jak / dlaczego to działa ???
RBarryYoung
4
@RBarryYoung, SUMPRODUCT działa jak funkcja Array, nie będąc nią. Chociaż może zrobić znacznie więcej niż to, do czego jest tutaj używany, tutaj po prostu sprawdza każde wystąpienie kolumny i wymienia skalowaną wartość dla każdej odrębnej wartości na podstawie liczby iteracji w kolumnie. Więc jeśli byłyby dwa wystąpienia „a”, dodawałoby 1/2 i 1/2, aby uzyskać 1. Więc dla każdej odrębnej wartości dodasz jeden do sumy.
Lance Roberts,
1
Jest to część, z którą mam problem: „ wymyślić skalowaną wartość dla każdej odrębnej wartości na podstawie liczby iteracji w kolumnie. ” Jeśli to rozumiem, to SUMPRODUCT skutecznie wykonuje pętlę podobną do for each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }prawej ? Mam trochę problemów ze zrozumieniem, w jaki sposób można wyliczyć zarówno warunkowy, jak i drugi parametr COUNTIF, ale nie pierwszy parametr COUNTIF? Czy ta magia DWIM jest udokumentowana / wyjaśniona gdziekolwiek przez MS? Byłoby miło wiedzieć, jak napisać je celowo.
RBarryYoung
1
Tak, rozumiesz, iteruje tablicę dla wartości, która normalnie byłaby pojedynczą wartością, mnożąc wszystkie jej parametry (czyli w tym przypadku tylko 1), a następnie dodając iteracje. SUMPRODUCTs mogą stać się bardzo złożone, ale są jedną z najbardziej przydatnych funkcji w programie Excel, mogą dokonywać dosłownych cudów.
Lance Roberts,
4
Nie powiedzie się to, jeśli dane wejściowe zawierają puste wpisy. Łatwo naprawić jak demoed na youtube to: =SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&"")). Zapewnia, że COUNTIFnigdy nie zwraca 0 dla pustych linii, co spowodowałoby DIV/0błąd.
por.
7

Znalazłem tutaj rozwiązanie, które wydaje się być niesamowitym sposobem na rozwiązanie tego problemu. Ale hej, to działa ...

= SUMA (JEŻELI (COUNTIF (A2: A100, A2: A100) = 0, "", 1 / COUNTIF (A2: A100, A2: A100)))

a następnie naciśnij Ctrl+ Shift+ Enter. Naciśnięcie tylko Enterda zły wynik.

Torben Gundtofte-Bruun
źródło
Chciałbym zobaczyć inne odpowiedzi! Czy istnieje lepszy sposób na rozwiązanie tego problemu?
Torben Gundtofte-Bruun
1
Nie, to najlepszy sposób. Nie jestem pewien, dlaczego jest tam IF. Możesz po prostu użyć tablicy = SUMA (1 / COUNTIF (A2: A100, A2: A100))
dkusleika,
2
@dkusleika IF wydaje się istnieć, aby zapobiec podziałowi przez błąd zerowy. Jak wspomniano na stronie, do której prowadzi link powyżej, jest to konieczne, jeśli zakres zawiera puste komórki, w przeciwnym razie możesz pominąć IF.
Bavi_H
1

W tym artykule pokazano to dla wartości tekstowych:

=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))

i to dla wartości liczbowych:

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

W tym artykule pokazano podobne formuły, ale pokazano także metodę wykorzystującą filtry.

Policz liczbę unikalnych wartości za pomocą filtra

Możesz użyć filtra zaawansowanego, aby wyodrębnić unikalne wartości z kolumny danych i wkleić je w nowej lokalizacji. Następnie możesz użyć funkcji WIERSZE, aby policzyć liczbę pozycji w nowym zakresie.

  1. Upewnij się, że pierwszy wiersz w kolumnie ma nagłówek kolumny.
  2. W menu Dane wskaż polecenie Filtr, a następnie kliknij polecenie Filtr zaawansowany.
  3. W oknie dialogowym Filtr zaawansowany kliknij opcję Kopiuj do innej lokalizacji.
  4. Jeśli liczony zakres nie jest jeszcze wybrany, usuń wszelkie informacje w polu Zakres listy, a następnie kliknij kolumnę (lub wybierz zakres), która zawiera dane.
  5. W polu Kopiuj do usuń wszelkie informacje w polu lub kliknij w polu, a następnie kliknij pustą kolumnę, w której chcesz skopiować unikalne wartości.
  6. Zaznacz pole wyboru Tylko unikalne rekordy i kliknij przycisk OK.

    Unikalne wartości z wybranego zakresu są kopiowane do nowej kolumny.

  7. W pustej komórce poniżej ostatniej komórki w zakresie wprowadź funkcję RZĘDY. Użyj zakresu unikatowych wartości, które właśnie skopiowałeś jako argument. Na przykład, jeśli zakres unikalnych wartości to B1: B45, wpisz:
    = ROWS (B1: B45)

Wstrzymano do odwołania.
źródło
1

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

Potwierdź za pomocą Ctrl + Shift + Enter

Dla każdej komórki zlicza, ile razy występuje, i sumuje odwrotność wszystkich tych wartości. Załóżmy, że jakiś ciąg lub liczba okcy 5 razy. Jego odwrotność wynosi 0.2, która jest sumowana 5 razy, więc dodaje się 1. Na koniec podaje liczbę różnych wartości.

Uwaga: nie działa, gdy występują puste miejsca!

użytkownik221470
źródło
0

Wypróbuj ten link. To pokazuje, jak liczyć unikalne wartości na liście z pominięciem pustych komórek.

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

= suma (jeśli (częstotliwość (dopasowanie (lista, lista, 0), dopasowanie (lista, lista, 0))> 0, 1))

Gdzie „Lista” to na przykład zakres komórek:

Lista = $ A $ 2: $ A $ 12 OR- Lista = przesunięcie ($ A $ 1 ,,, dopasowanie (rept ("z", 255), $ A: $ A)) -LUB- Lista = przesunięcie ($ A $ 1, ,, dopasowanie (wartość (rept ("9", 255)), $ A: $ A))

Charles Hunt
źródło
0

= SUMA (JEŻELI (CZĘSTOTLIWOŚĆ (JEŻELI (PODSUMOWANE (3, PRZESUNIĘCIE (A2: A100, WIERSZ (A2: A100) -ROW (A2), 0,1)), MECZ („~” i A2: A100, A2: A100 & ” ", 0)), ROW (A2: A100) -ROW (A2) +1), 1))

Pamiętaj, aby nacisnąć klawisze CONTROL + SHIFT + ENTER po wklejeniu tej formuły. Dotyczy to zakresu A2: A100, odpowiednio dostosuj zakres.

Vlada
źródło