【问题标题】:Using COUNTIFS in an array formula在数组公式中使用 COUNTIFS
【发布时间】:2015-03-23 04:23:52
【问题描述】:

我正在尝试计算给定类型的某事发生的次数,我需要这种行为来自动扩展到插入的行。类似的东西:

=Arrayformula(COUNTIFS(I:I,I:I,H:H,H:H,G:G,G:G))

嵌套的 countif 公式在单行上使用时会产生正确的值,但目前数组公式一直输出 1。

我的数据类似于:

    Column1   Column2    Column3   Result
--------------------------------------------
   apple     green      eaten       x

   orange    orange     noteaten    x

   apple     red        eaten       x

   orange    orange     noteaten    x

   apple     green      eaten       x

...

x 列是 arrayformula 将输出的位置。

第 1 行的 X 应该查看所有数据并计算绿色苹果的数量 eaten,下一行将计算 noneaten 橙子的数量,依此类推。我知道 arrayformula 不采用聚合函数,但我没有找到 countif 的替代品。

【问题讨论】:

  • 我对 Google 表格了解不多,但在 Excel 中,如果我理解正确的话,这不需要是数组公式。只需复制下来的非数组版本就足够了,尽管我个人不喜欢使用这种交集方法(也许这在 Google 表格中无效?),因此更喜欢 =COUNTIFS(I:I,I2,H: H,H2,G:G,G2) 在第 2 行并向下复制。
  • 我忘了说它需要开放式列的原因是因为这是计算表单的输出,它为每次提交插入一个新行

标签: google-sheets count google-sheets-formula array-formulas


【解决方案1】:

不幸的是,在 Google 表格中,COUNTIFS 不能在数组上进行迭代,例如 COUNTIF 可以(在撰写本文时,无论如何)。

您需要使用 MMULT,例如:

=ArrayFormula(IF(ROW(G:G)=1,"Result",MMULT((G:G=TRANSPOSE(G:G))*(H:H=TRANSPOSE(H:H))*(I:I=TRANSPOSE(I:I)),SIGN(ROW(G:G)))))

但请注意,Sheets 中似乎存在一个限制,即由 G:G=TRANSPOSE(G:G) 等形成的二维数组不能超过 1000 万个元素。这对应于最多 3162 行。

另一种选择是使用字符串连接:

=ArrayFormula(COUNTIF(G:G&CHAR(9)&H:H&CHAR(9)&I:I,G:G&CHAR(9)&H:H&CHAR(9)&I:I))

绕过“3162”限制。 CHAR(9) 是一个制表符,但它可以是您确定不会出现在您的数据中的任何字符。

【讨论】:

  • 谢谢,我无法让 MMULT 工作,您能否详细说明实际发生的情况?不管怎样,3162 行限制可能会破坏交易。
  • 这是一个试图解释的电子表格:docs.google.com/spreadsheets/d/…
  • 还进行了编辑以提供另一种选择(我在 ss 中测试了 MMULT,尽管我提到了限制,但它似乎可以工作)。
  • 您能解释一下语句:“COUNTIFS 不能像 COUNTIF 那样在数组上迭代”吗?这是谷歌表格特有的东西吗?还是它也适用于 Excel?如果是这样,你能举一个很小的例子来说明你的意思吗?
  • @XORLX,很好的问题,很抱歉没有具体说明。在这种情况下,我真的只是在谈论 Google 表格(实际上,OP 删除 excel 标记可能是合适的)。在 Sheets 中,您可以在 COUNTIF 的第二个参数中输入一个范围(或计算数组),作为数组公式调用,将自动生成一个数组输出,其中该范围内的每个元素都被“计数”。无法对 COUNTIFS 中的第二个(以及第四个和第六个等)参数执行相同的操作(原因未知)。 (待定)
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多