Oto, co uważam za najlepsze do tej pory rozwiązanie:
=CountIf(ArrayFormula(range<>""),TRUE)
Oto dlaczego w 3 prostych krokach
Krok 1: Proste jak ciasto - Dodaj dodatkową kolumnę
Odpowiedź przez eniacAvenger przyniesie właściwe rozwiązanie, bez martwienia się o przypadkach brzegowych jak =A1<>""
zdaje się przybyć w odpowiednim truthy / wartość falsy oparciu o jak my intuicyjnie myśleć o pustych komórek, zarówno pierwotne półfabrykatów lub utworzone półfabrykatów.
Więc wyobraź sobie, że mamy te dane i chcemy, aby liczba elementów niebędących pustymi była w B2:B6
:
| | A | B | C |
|---|-------------|-------|---------|
| 1 | Description | Value | B1<>"" |
| 2 | Text | H | TRUE |
| 3 | Number | 1 | TRUE |
| 4 | IF -> "" | | FALSE |
| 5 | IF -> Text | h | TRUE |
| 6 | Blank | | FALSE |
Gdybyśmy polegali na kolumnie C , moglibyśmy uzyskać liczbę wartości w B w następujący sposób:
=COUNTIF(C2:C6,True)
Krok 2: Użyj, FormulaArray
aby dynamicznie utworzyć dodatkową kolumnę
Jednak komentarz consideRatio jest ważny - jeśli potrzebujesz dodatkowej kolumny, często możesz osiągnąć ten sam cel, dzięki ArrayFormula
czemu możesz utworzyć kolumnę w pamięci bez zajmowania miejsca w arkuszu.
Więc jeśli chcemy tworzyć C dynamicznie, możemy użyć formuły tablicowej takiej jak ta:
=ArrayFormula(B2:B6<>"")
Gdybyśmy po prostu umieścili go w C2, utworzyłoby pionową tablicę jednym pociągnięciem pióra:
| | A | B | C |
|---|-------------|-------|--------------------------|
| 1 | Description | Value | =ArrayFormula(B2:B6<>"") |
| 2 | Text | H | TRUE |
| 3 | Number | 1 | TRUE |
| 4 | IF -> "" | | FALSE |
| 5 | IF -> Text | h | TRUE |
| 6 | Blank | | FALSE |
Krok 3: Policz wartości w kolumnie dynamicznej
Ale po rozwiązaniu tego problemu nie potrzebujemy już kolumny do wyświetlania jedynie wartości.
ArrayFormula
rozwiąże z następującym zakresie: {True,True,False,True,False}
.
CountIf
po prostu przyjmuje dowolny zakres iw tym przypadku może policzyć liczbę wartości True.
Więc możemy zawinąć CountIf
wartości wytworzone w ArrayFormula
ten sposób:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Dalsze czytanie
Inne rozwiązania w tym wątku są albo zbyt złożone, albo zawodzą w szczególnych przypadkach skrajnych, które wyliczyłem w tym arkuszu testowym:
Dlaczego CountA
działa tak dziwnie, zobacz moją odpowiedź tutaj