Rob*_*bit 113 google-sheets google-sheets-formula
在Google电子表格中:如何计算具有值的给定区域的行?关于这一点的所有提示我发现到现在为止导致公式计算具有非空内容的行(包括公式),但是一个单元格
=IF(1=2;"";"") // Shows an empty cell
Run Code Online (Sandbox Code Playgroud)
也被计算在内.
这项简单任务的解决方案是什么?
小智 183
我刚用过=COUNTIF(Range, "<>"),它为我计算了非空单元格.
Del*_*ulu 118
=counta(range)
Run Code Online (Sandbox Code Playgroud)
counta:"返回数据集中值的数量"
注意:CountA认为""是一个值.只有空白的单元格(按单元格中的删除以将其删除)不计算在内.
countblank:"返回给定范围内的空单元格数"
注意:CountBlank考虑两个空白单元格(按删除以清空单元格)和具有返回""为空单元格的公式的单元格.
如果您的范围包含产生的公式"",则可以修改公式
=counta(range)
Run Code Online (Sandbox Code Playgroud)
至:
=Counta(range) - Countblank(range)
Run Code Online (Sandbox Code Playgroud)
编辑:函数countblank不是countblanks,后者会给出错误.
Kyl*_*Mit 35
=CountIf(ArrayFormula(range<>""),TRUE)
Run Code Online (Sandbox Code Playgroud)
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 |
Run Code Online (Sandbox Code Playgroud)
如果我们依赖C列,我们可以得到B中的值的计数,如下所示:
=COUNTIF(C2:C6,True)
Run Code Online (Sandbox Code Playgroud)
FormulaArray用于动态创建额外列但是,thoughtfulRatio的注释是有效的 - 如果你需要一个额外的列,你通常可以实现相同的目标ArrayFormula,可以在内存中创建一个列,而不会占用表空间.
因此,如果我们想要动态创建C,我们可以使用如下的数组公式:
=ArrayFormula(B2:B6<>"")
Run Code Online (Sandbox Code Playgroud)
如果我们简单地将它放在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 |
Run Code Online (Sandbox Code Playgroud)
但随着解决了这个问题,我们不再需要列来显示值.
ArrayFormula将解决以下范围:{True,True,False,True,False}.
CountIf只需要在任何范围内,在这种情况下可以计算真值的数量.
所以我们可以像这样包装CountIf产生的值ArrayFormula:
=CountIf(ArrayFormula(B2:B6<>""),TRUE)
Run Code Online (Sandbox Code Playgroud)
此线程中的其他解决方案要么过于复杂,要么在我在此测试表中枚举的特定边缘情况中失败:
为什么它的CountA工作原理很糟糕,请参阅我的答案
Dáv*_*zki 18
对我来说,没有一个答案适用于包含原始细胞和基于公式为空的细胞的范围(例如=IF(1=2;"";""))
为我解决的是:
=COUNTA(FILTER(range, range <> ""))
nom*_*nom 11
这个对我有用:
=SUMPRODUCT(NOT(ISBLANK(F2:F)))
Run Code Online (Sandbox Code Playgroud)
从F2到列末尾的所有非空单元格的计数
解决了我使用Yogi Anand发现的Google搜索解决方案:https://productforums.google.com/d/msg/docs/3qsR2m-1Xx8/sSU6Z6NYLOcJ
下面的示例计算A3:C范围内的非空行数,请记住使用您感兴趣的范围更新公式中的两个范围.
=ArrayFormula(SUM(SIGN(MMULT(LEN(A3:C), TRANSPOSE(SIGN(COLUMN(A3:C)))))))
Run Code Online (Sandbox Code Playgroud)
另外,请确保避免循环依赖,例如,如果您计算A:C中的非空行数并将此公式放在A或C列中,则会发生这种情况.
给定范围A:A,Id建议:
=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))
Run Code Online (Sandbox Code Playgroud)
问题是COUNTA准确地计数了长度为零的字符串的单元格数""。
解决的办法是精确地找到这些细胞的数量。可以通过查找所有文本单元格并减去所有带有至少一个字符的文本单元格来找到
""但不包括真正的空单元格""但不包括真正的空白单元格这意味着该值COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")应为文本单元格的数量减去具有至少一个字符的文本单元格的数量,即,包含确切字符的单元格的数量""
小智 5
一个对我有用的简单解决方案:
=COUNTIFS(A:A;"<>"&"")
Run Code Online (Sandbox Code Playgroud)
它计算非空的数字,字符串,日期等
eni*_*ger -17
使用函数“CountBlank”创建另一列来确定引用的单元格是否为空。然后对新“CountBlank”列中创建的值使用计数。