Ответ 1
Сделайте еще один столбец, который определяет, является ли ссылочная ячейка пустой, используя функцию "CountBlank". Затем используйте count для значений, созданных в новом столбце "CountBlank".
В электронной таблице Google: Как я могу подсчитать строки данной области, которые имеют значение? Все подсказки по этому поводу, которые я обнаружил до сих пор, приводят к формулам, которые действительно подсчитывают строки с непустым содержимым (включая формулу), но ячейку с
=IF(1=2;"";"") // Shows an empty cell
тоже считается.
Каково решение этой простой задачи?
Сделайте еще один столбец, который определяет, является ли ссылочная ячейка пустой, используя функцию "CountBlank". Затем используйте count для значений, созданных в новом столбце "CountBlank".
Я просто использовал =COUNTIF(Range, "<>")
, и он подсчитал для меня непустые ячейки.
=counta(range)
counta
: "Возвращает счетчик числа значений в наборе данных"
Примечание: counta
считает ""
значением . Только ячейки, которые пусты (нажмите delete в ячейке, чтобы ее удалить), не учитываются.
Поддержка Google: https://support.google.com/docs/answer/3093991
countblank
: "Возвращает количество пустых ячеек в заданном диапазоне"
Примечание: countblank
рассматривает обе пустые ячейки (нажмите delete, чтобы удалить ячейку) и ячейки, у которых есть формула, которая возвращает ""
как пустое.
Поддержка Google: https://support.google.com/docs/answer/3093403
Если у вас есть диапазон, который включает формулы, которые приводят к ""
, вы можете изменить свою формулу из
=counta(range)
в
=Counta(range) - Countblank(range)
EDIT: функция countblank
, а не countblanks
, последняя даст ошибку.
=CountIf(ArrayFormula(range<>""),TRUE)
Ответ от eniacAvenger даст правильное решение, не беспокоясь о крайних случаях, так как =A1<>""
кажется, приходит к правильному значению истина/ложь, основанном на том, как мы интуитивно думаем о пустых ячейках, либо о девственных, либо о созданных пробелах.
Итак, представьте, что у нас есть эти данные, и мы хотим, чтобы количество незаполненных записей в 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)
FormulaArray
для динамического создания дополнительного столбца Тем не менее, комментарий CommentRatio является допустимым - если вам нужен дополнительный столбец, вы часто можете достичь той же цели с помощью ArrayFormula
который может создать столбец в памяти, не 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 |
Но после этого нам больше не нужен столбец для простого отображения значений.
ArrayFormula
разрешит следующий диапазон: {True,True,False,True,False}
. CountIf
просто принимает в любом диапазоне и в этом случае может посчитать количество значений True.
Таким образом, мы можем обернуть CountIf
вокруг значений, созданных ArrayFormula
следующим образом:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Другие решения в этом потоке либо слишком сложны, либо терпят неудачу в определенных крайних случаях, которые я перечислил в этом тестовом листе:
Почему CountA
работает так CountA
, смотрите мой ответ здесь
Для меня ни один из ответов не работал для диапазонов, содержащих как девственные ячейки, так и ячейки, которые пусты на основе формулы (например, =IF(1=2;"";"")
)
Что для меня это решило:
=COUNTA(FILTER(range, range <> ""))
Решено использовать решение, которое я нашел googling от Yogi Anand: https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ
В приведенном ниже примере подсчитывается количество непустых строк в диапазоне A3: C, не забудьте обновить оба диапазона в формуле с интересующим вас диапазоном.
=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))
Также избегайте циклических зависимостей, это произойдет, если вы, например, подсчитаете количество непустых строк в A: C и поместите эту формулу в столбец A или C.
Учитывая диапазон A:A
, Id предлагает:
=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))
Проблема заключается в том, что COUNTA перечитывает точно количество ячеек с нулевыми строками длины ""
.
Решение состоит в том, чтобы найти счетчик именно этих ячеек. Это можно найти, просмотрев все текстовые ячейки и вычитая все текстовые ячейки с хотя бы одним символом
""
, но исключая по-настоящему пустые ячейки""
, но исключая по-настоящему пустые ячейкиЭто означает, что значением COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")
должно быть количество текстовых ячеек за вычетом количества текстовых ячеек, у которых есть хотя бы один символ, т.е. количество ячеек, содержащих ровно ""
Более простое решение, которое работает для меня:
=COUNTIFS(A:A;"<>"&"")
Он подсчитывает как числа, строки, даты и т.д., которые не являются пустыми
Насколько я вижу, большинство решений здесь подсчитывают количество непустых ячеек, а не количество строк с непустыми ячейками внутри.
Одним из возможных решений для диапазона B3:E29
является, например,
=SUM(ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1)))
Здесь ArrayFormula(IF(B3:B29&C3:C29&D3:D29&E3:E29="";0;1))
возвращает столбец 0
(если строка пуста) и 1
(еще).
Еще один дан в отношении ответа.
Вы можете определить пользовательскую функцию с помощью Apps Script (Инструменты> Редактор скриптов), которая называется, например, numNonEmptyRows
:
function numNonEmptyRows(range) {
Logger.log("inside");
Logger.log(range);
if (range && range.constructor === Array) {
return range.map(function(a){return a.join('')}).filter(Boolean).length
}
else {
return range ? 1 : 0;
}
}
А затем используйте его в такой ячейке =numNonEmptyRows(A23:C25)
чтобы подсчитать количество непустых строк в диапазоне A23:C25
;
В Google Sheets для подсчета количества строк, которые содержат хотя бы одну непустую ячейку в двумерном диапазоне:
=ARRAYFORMULA(
SUM(
N(
MMULT(
N(A1:C5<>""),
TRANSPOSE(COLUMN(A1:C5)^0)
)
>0
)
)
)
Где A1: C5 - диапазон, который вы проверяете на наличие непустых строк.
Формула исходит и объясняется в следующей статье от EXCELXOR - https://excelxor.com/2015/03/30/counting-rows-where-at-least-one-condition-is-met/
Очень гибкий способ сделать это - использовать ARRAYFORMULA.
В качестве примера представьте, что вы хотите считать непустые строки (текстовые поля), вы можете использовать этот код:
=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))
Здесь происходит то, что "ArrayFormula" позволяет вам работать с набором значений. Используя функцию SUM, вы указываете "ArrayFormula" для суммирования любого значения набора. Предложение "If" используется только для проверки "пусто" или "не пусто", 1 для не пустого и 0 в противном случае. "Len" возвращает длину различных текстовых полей, где вы определяете набор (диапазон), который вы хотите проверить. Наконец, "ArrayFormula" будет суммировать 1 для каждого поля в наборе (диапазоне), в котором "len" возвращает больше 0.
Если вы хотите проверить любое другое условие, просто измените первый аргумент предложения IF.
Это работает для меня:
=SUMPRODUCT(NOT(ISBLANK(F2:F)))
Подсчет всех непустых ячеек от F2 до конца столбца