Answers:
使用函数“ CountBlank”创建另一列以确定引用的单元格是否为空白。然后对新的“ CountBlank”列中创建的值使用count。
我刚刚使用过=COUNTIF(Range, "<>")
,它为我计算了非空单元格。
=COUNTIF(Range,"?*")
=counta(range)
counta
:“返回数据集中值的数量的计数”
注意:CountA
视为""
一个值。仅空白的单元格(在单元格中按Delete键将其空白)不计算在内。
countblank
:“返回给定范围内的空单元格数”
注意:会同时CountBlank
考虑空白单元格(按Delete键以使单元格空白)和具有公式返回""
为空的单元格单元格的单元格。
如果您的范围包含导致的公式""
,则可以从修改公式
=counta(range)
至:
=Counta(range) - Countblank(range)
编辑:函数是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 |
如果我们依靠Column C,我们可以这样获得B中的值计数:
=COUNTIF(C2:C6,True)
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 |
但是解决了这一问题后,我们不再需要该列仅显示值。
ArrayFormula
将解析为以下范围:{True,True,False,True,False}
。
CountIf
可以取任意范围,在这种情况下可以计算True值的数量。
因此,我们可以包装这样CountIf
产生的值ArrayFormula
:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
该线程中的其他解决方案要么过于复杂,要么在我在此测试表中列举的某些特殊情况下失败:
ArrayFormula(...)
以返回值数组可能更容易CountIf
。我已经更新了答案和电子表格演示。他们俩都会做同样的事情,但清洁度仅次于良好度。
对我来说,没有答案适用于既包含原始细胞又包含基于公式为空的细胞的范围(例如=IF(1=2;"";"")
)
为我解决的是:
=COUNTA(FILTER(range, range <> ""))
=COUNTA(filter({1;range},{1;range}<>"")) - 1
使用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,"?*")
应为文本单元格的数量减去具有至少一个字符的文本单元格的数量,即,包含确切字符的单元格的数量""
据我所知,这里的大多数解决方案都是计算非空单元格的数量,而不是内部具有非空单元格的行的数量。
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
(否则)。
consideRatio的答案中给出了另一个。
您可以使用Apps脚本(工具>脚本编辑器)定义自定义函数,例如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表格中,要计算在二维范围内至少包含一个非空单元格的行数:
=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”返回大于0的集合(范围)内的每个字段,“ ArrayFormula”将总计1。
如果要检查其他任何条件,只需修改IF子句的第一个参数。