繁体   English   中英

计算非空值的行

[英]Count rows with not empty value

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

=IF(1=2;"";"")  // Shows an empty cell

也算在内。

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

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

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

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

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

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

    注意: CountBlank将空白单元格(按删除键使单元格空白)和具有返回""的公式的单元格都视为单元格。

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

如果您有一个包含导致""公式的范围,那么您可以修改您的公式

=counta(range)

到:

=Counta(range) - Countblank(range)

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

这是我认为迄今为止最好的解决方案:

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

这就是为什么通过 3 个简单的步骤

第 1 步:简单如饼图 - 添加额外的列

eniacAvenger答案将产生正确的解决方案,而无需担心边缘情况,因为=A1<>""似乎根据我们对空白单元格的直观思考得出正确的真/假值,无论是原始空白还是创建空白。

所以想象一下我们有这些数据,我们想要B2:B6的非空白计数:

|   |            |      |        |
|---|-------------|-------|---------|
|  | Description | Value | B1<>""  |
|  | Text        | H     | TRUE    |
|  | Number      | 1     | TRUE    |
|  | IF -> ""    |       | FALSE   |
|  | IF -> Text  | h     | TRUE    |
|  | Blank       |       | FALSE   |

如果我们依赖于C 列,我们可以像这样获得 B 中值的计数:

=COUNTIF(C2:C6,True)

第 2 步:使用FormulaArray动态创建 Extra Column

然而, consideRatio 的评论是有效的——如果您需要一个额外的列,您通常可以使用ArrayFormula来实现相同的目标,它可以在内存中创建一列而不会占用工作表空间。

所以如果我们想动态创建 C,我们可以使用这样的数组公式:

=ArrayFormula(B2:B6<>"")

如果我们简单地将它放在 C2 中,它将使用笔的单个笔划创建垂直阵列:

|   |            |      |                         |
|---|-------------|-------|--------------------------|
|  | Description | Value | =ArrayFormula(B2:B6<>"") |
|  | Text        | H     | TRUE                     |
|  | Number      | 1     | TRUE                     |
|  | IF -> ""    |       | FALSE                    |
|  | IF -> Text  | h     | TRUE                     |
|  | Blank       |       | FALSE                    |

步骤 3:计算动态列中的值

但是解决了这个问题后,我们不再需要该列来仅显示值。

ArrayFormula将解析为以下范围: {True,True,False,True,False}
CountIf只接受任何范围,在这种情况下可以计算 True 值的数量。

因此,我们可以换CountIf周围所产生的价值ArrayFormula是这样的:

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

进一步阅读

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

Google 电子表格 - CountA 测试 - 演示

关于为什么CountA以它CountA的方式工作,请在此处查看我的答案

对我来说,没有一个答案适用于包括原始单元格和基于公式的空单元格的范围(例如=IF(1=2;"";"")

为我解决的是:

=COUNTA(FILTER(range, range <> ""))

这个对我有用:

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

F2列末尾的所有非空单元格的计数

使用我发现 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 过分计数了具有零长度字符串""的单元格数量。

解决方案是找到这些单元格的数量。 这可以通过查找所有文本单元格并减去至少一个字符的所有文本单元格来找到

  • COUNTA(A:A):具有值的单元格,包括""但不包括真正的空单元格
  • COUNTIF(A:A,"*"):识别为文本的单元格,包括""但不包括真正的空白单元格
  • COUNTIF(A:A,"?*"):单元格被识别为至少一个字符的文本

这意味着值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 (否则)。

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 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”将为“len”返回大于 0 的集合(范围)内的每个字段求和 1。

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

使用函数“CountBlank”制作另一列来确定引用的单元格是否为空白。 然后对在新的“CountBlank”列中创建的值使用计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM