首页 文章

Google电子表格:ArrayFormula和Filter

提问于
浏览
0

我意识到这个 Headers 有多个问题,但我不理解它们的答案,或者它与我的问题没有直接关系 .

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

公式看起来像这样

=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 列是我想要的"interate"列,其余的范围应评估为他们现在正在评估的内容 .

我试过这个:

=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 是如何工作的?

1 回答

  • 2

    filter 本身就是一个arrayformula→它不能在另一个arrayFormula中使用,因为Sheets不能处理数组数组 .

    解决方法

    您正在寻找 countifs arrayFormula,它使用 mmult 解决:

    =arrayformula(TRANSPOSE(MMULT(TRANSPOSE((Data!B$2:B>=B2)*(Data!B$2:B<=B3)*(Data!C$2:C<=E2)*(Data!C$2:C>=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

相关问题