【问题标题】:iterate row by row COUNTIF using ArrayFormula on Google Sheets在 Google Sheets 上使用 ArrayFormula 逐行迭代 COUNTIF
【发布时间】:2017-11-26 04:28:26
【问题描述】:

我正在尝试迭代一个 COUNTIF 公式,该公式计算每行中包含大于 4 的数字的单元格数。我正在尝试使用 ArrayFormula 来执行此操作,但它不起作用。

不幸的是,它计算了整个范围 B2:G39 中与条件匹配的所有单元格,导致在 K 列的每一行中输入 26 个而不是逐行计数,即 B2:G2 中的单元格数 >4 在 K2 中输入, B3:G3 中的单元格数 >4 进入 K3

这是公式

=ARRAY_CONSTRAIN(arrayformula( if( row(H:H)=1, "Number of cells >4",COUNTIF(A2:G39,">4"))),39,1)

这是一个spreadsheet,其中包括示例数据和我的公式

【问题讨论】:

标签: google-sheets spreadsheet countif array-formulas


【解决方案1】:

尝试在单元格 K2 中输入:

=ARRAYFORMULA(IF(ISBLANK(A2:A),IFERROR(1/0),MMULT(SIGN(A2:G>4),SIGN(TRANSPOSE(A2:G2)))))

通过将数据转换为矩阵形式,您可以将 MMULTSIGN 函数与 ARRAYFORMULA 结合使用,以实现对您要查找的行的条件计数。

【讨论】:

  • 谢谢@Greg。那行得通!为什么我的公式不起作用?想了解 arrayformulas 的限制
  • 我很高兴,@herteladrian。为了便于讨论,您的公式已简化为 =arrayformula(COUNTIF(A2:G39,">4")) 不起作用,因为范围参数 A2:G39 被 COUNTIF 函数“征用”并用于其计算,返回的结果不是数组。换句话说,ARRAYFORMULA 永远不会看到输入范围,因此它没有机会替代它。这就是为什么 ARRAYFORMULA 也不能与 AND 和 OR 函数一起使用。
【解决方案2】:

Sample File

我发现mmult 很慢,可能会导致你的文件加载时间过长。我建议改用len + join(带查询)(速度未测试):

={"RegexReplace-Len..."; ArrayFormula(LEN(REGEXREPLACE(TRANSPOSE(QUERY(TRANSPOSE(FILTER(--(A2:P>5),A2:A<>"")),,100500)),"[ 0]", "")))}

这里还有一个solution by JPV

=filter(COUNTIF(IF(A2:P>5, ROW(A2:A)), ROW(A2:A)), A2:A<>"")

A2:P 更改为您的范围,将A2:A 更改为没有空白单元格的键列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2015-07-16
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多