【问题标题】:Google Spreadsheet: ArrayFormula and FilterGoogle 电子表格:ArrayFormula 和过滤器
【发布时间】:2017-08-16 09:46:35
【问题描述】:

我意识到这个标题有多个问题,但我不明白它们的答案,或者它与我的问题没有直接关系。

我试图避免手动“拖动”一个公式来为每一行复制它。

公式看起来像这样

=IF(ISBLANK(A6), 
    "", 
    COUNT(FILTER(Data!C$2:C, 
                 Data!A$2:A = A6, 
                 Data!B$2:B >= B$2, 
                 Data!B$2:B <= B$3, 
                 Data!C$2:C >= E$3, 
                 Data!C$2:C <= E$2)))

我不确定在使用 ARRAYFORMULA 时是否需要所有锚点。

A 列是我想要“交互”的列,其余范围应评估为他们现在正在评估的任何内容。

我试过这个:

=ARRAYFORMULA(IF(ISBLANK(A6:A), 
              "", 
              COUNT(FILTER(Data!C$2:C, 
                           Data!A$2:A = A6:A, 
                           Data!B$2:B >= B$2, 
                           Data!B$2:B <= B$3, 
                           Data!C$2:C >= E$3,
                           Data!C$2:C <= E$2))))

其中A6:A 似乎正确评估了A 列中的每个单元格。但是,Data 表中的范围似乎也评估为单个值,而不是范围。

是我遗漏了什么还是我不明白ARRAYFORMULA 的工作原理?

【问题讨论】:

标签: google-sheets


【解决方案1】:

filter 本身就是一个数组公式 → 它不能在另一个数组公式中使用,因为表格无法处理数组数组。

解决方法

你在找countifsarrayFormula,用mmult解决:

=arrayformula(TRANSPOSE(MMULT(TRANSPOSE((Data!B$2:B&gt;=B2)*(Data!B$2:B&lt;=B3)*(Data!C$2:C&lt;=E2)*(Data!C$2:C&gt;=E3)),--(Data!A$2:A=TRANSPOSE(A6:A10)))))


说明

=arrayformula(TRANSPOSE(MMULT(...,...) ^^^^^ mmult will count for 1's and 0's in intersection of conditions

...TRANSPOSE((Data!B$2:B>=B2)*(Data!B$2:B<=B3)*(Data!C$2:C<=E2)*(Data!C$2:C>=E3))... ^^^^ any number of 'plain' conditions goes here

...--(Data!A$2:A=TRANSPOSE(A6:A10)... ^^^^ all 'filter' conditions go here, you have only 1 of those

【讨论】:

  • '--' 有什么作用,它是必需的吗?这让人想起 SQL 注释。
  • -- 将布尔值 true/false 转换为 1/0。 mmult 函数使用数字,而不是布尔值。另一种方法是乘以 1 (*1) 或加 0 (+1)
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 2021-10-15
  • 2016-07-02
  • 2018-10-17
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
相关资源
最近更新 更多