Вот что я считаю лучшим решением на данный момент:
=CountIf(ArrayFormula(range<>""),TRUE)
Вот почему за 3 простых шага
Шаг 1. Просто как пирог - добавьте дополнительный столбец
Ответ на eniacAvenger даст правильное решение , не заботясь о случаях краев , как =A1<>""
кажется , чтобы прийти к правильному truthy / falsy стоимости , основанным на том , как мы интуитивно думать о пустых ячейках, либо девственные заготовки или созданные заготовки.
Итак, представьте, что у нас есть эти данные и мы хотим, чтобы в нем было количество непустых пробелов 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 |
Если бы мы полагались на столбец C , мы могли бы получить количество значений в B следующим образом:
=COUNTIF(C2:C6,True)
Шаг 2: используйте FormulaArray
для динамического создания дополнительного столбца
Тем не менее, комментарий consideRatio является допустимым - если вам нужен дополнительный столбец, вы часто можете достичь той же цели с помощью, ArrayFormula
который может создать столбец в памяти, не занимая пространство листа.
Итак, если мы хотим создать C динамически, мы можем использовать такую формулу массива:
=ArrayFormula(B2:B6<>"")
Если мы просто поместим его в C2, он создаст вертикальный массив одним движением пера:
| | 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 |
Шаг 3. Подсчитайте значения в динамическом столбце
Но когда это решено, нам больше не нужен столбец, чтобы просто отображать значения.
ArrayFormula
будет решать в следующем диапазоне: {True,True,False,True,False}
.
CountIf
просто принимает любой диапазон и в этом случае может подсчитать количество истинных значений.
Таким образом, мы можем обернуть CountIf
значения, полученные ArrayFormula
следующим образом:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Дальнейшее чтение
Другие решения в этом потоке либо слишком сложны, либо не работают в определенных крайних случаях, которые я перечислил в этом тестовом листе:
О том, почему CountA
работает шаткий способ, см. Мой ответ здесь