计算非空值的行

时间:2014-06-06 12:19:12

标签: google-sheets google-sheets-formula

在Google电子表格中:如何计算具有值的给定区域的行数?关于这一点的所有提示我发现到目前为止导致公式计算具有非空内容(包括公式)的行,但是具有

的单元格
=IF(1=2;"";"")  // Shows an empty cell

也被计算在内。

这项简单任务的解决方案是什么?

13 个答案:

答案 0 :(得分:140)

我刚刚使用了=COUNTIF(Range, "<>"),它为我计算了非空单元格。

答案 1 :(得分:89)

=counta(range) 
  • counta:“返回数据集中的数量”

    注意:CountA认为""。只有空白的单元格(按单元格中的删除以将其删除)不计算在内。

    Google支持:https://support.google.com/docs/answer/3093991

  • countblank:“返回给定范围内单元格的数量”

    注意:CountBlank同时考虑两个空白单元格(按删除以清空单元格)和具有返回""的公式的单元格为单元格。

    Google支持:https://support.google.com/docs/answer/3093403

如果您的范围包含导致""的公式,则可以从

修改公式
=counta(range)

为:

=Counta(range) - Countblank(range)

编辑:函数是countblank,而不是countblanks,后者会出错。

答案 2 :(得分:28)

到目前为止,我认为这是最好的解决方案:

=CountIf(ArrayFormula(range<>""),TRUE)

这就是3个简单步骤

的原因

第1步:简单为饼 - 添加额外列

answer by 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)

步骤2:使用FormulaArray动态创建额外列

但是,consideRatio's comment是有效的 - 如果您需要额外的列,您通常可以使用ArrayFormula实现相同的目标,这可以在内存中创建一列而不会占用工作表空间。< / p>

因此,如果我们想要动态创建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只接受任何范围,在这种情况下可以计算True值的数量。

因此我们可以将CountIf包围在ArrayFormula生成的值中,如下所示:

=CountIf(ArrayFormula(B2:B6<>""),TRUE)

进一步阅读

此线程中的其他解决方案要么过于复杂,要么在我在此测试表中列举的特殊边缘情况中失败:

Google Spreadsheet - CountA Test - Demo

为什么CountA以不稳定的方式运作,请参阅my answer here

答案 3 :(得分:16)

对我来说,没有一个答案适用于包含原始单元格和基于公式为空的单元格的范围(例如browser.execute_script('javascript:window.scrollBy(250,350)')

为我解决的是:

=IF(1=2;"";"")

答案 4 :(得分:7)

使用解决方案解决了我发现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)))))))

另外,请确保避免循环依赖,例如,如果您计算A:C中的非空行数并将此公式放在A或C列中,就会发生这种情况。

答案 5 :(得分:5)

这对我有用:

=SUMPRODUCT(NOT(ISBLANK(F2:F)))

F2 到列的结束

的所有非空单元格的计数

答案 6 :(得分:4)

一个对我有用的简单解决方案:

=COUNTIFS(A:A;"<>"&"")

它计算非空的数字,字符串,日期等

答案 7 :(得分:3)

鉴于范围A:A,我建议:

=COUNTA(A:A)-(COUNTIF(A:A,"*")-COUNTIF(A:A,"?*"))

问题是COUNTA过度计算了长度为""的零个单元格。

解决方案是找到这些细胞的计数。这可以通过查找所有文本单元格并使用至少一个字符

减去所有文本单元格来找到
  • COUNTA(A:A):有价值的单元格,包括""但不包括真正的空单元格
  • COUNTIF(A:A,&#34; *&#34;):被识别为文本的单元格,包括""但不包括真正的空白单元格
  • COUNTIF(A:A,&#34;?*&#34;):被识别为至少包含一个字符的文本的单元格

这意味着值COUNTIF(A:A,"*")-COUNTIF(A:A,"?*")应该是文本单元格数量减去至少包含一个字符的文本单元格数量,即包含完全""

的单元格数量

答案 8 :(得分:2)

据我所知,这里的大多数解决方案都是计算非空单元格的数量,而不是内部具有非空单元格的行的数量。

例如,对于范围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's answer中给出了另一个。

答案 9 :(得分:0)

一种非常灵活的方法是使用ARRAYFORMULA。

例如,假设您要计算非空字符串(文本字段),可以使用以下代码:

=ARRAYFORMULA(SUM(IF(Len(B3:B14)>0, 1, 0)))

这里发生的是,“ ArrayFormula”使您可以处理一组值。使用SUM函数,您可以指示“ ArrayFormula”对集合的任何值求和。 “ If”子句仅用于检查“空”或“不为空”,1表示不为空,否则为0。 “长度”返回不同文本字段的长度,您可以在其中定义要检查的集合(范围)。最后,对于“ len”返回大于0的集合(范围)内的每个字段,“ ArrayFormula”的总和为1。

如果要检查其他条件,只需修改IF子句的第一个参数即可。

答案 10 :(得分:0)

您可以使用称为numNonEmptyRows的Apps脚本(工具>脚本编辑器)定义自定义函数:

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范围内的非空行数;

答案 11 :(得分:0)

在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/

答案 12 :(得分:-9)

使用函数“CountBlank”创建另一列,确定引用的单元格是否为空。然后对新“CountBlank”列中创建的值使用count。