我意识到这个标题有多个问题,但我不理解它们的答案,或者它与我的问题没有直接关系。
我试图避免手动“拖动”公式来为每一行复制它。
公式看起来像这样
=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
是如何运作的?
答案 0 :(得分:2)
filter
本身就是一个数组形式→它不能在另一个arrayFormula中使用,因为Sheets无法处理数组数组。
您正在寻找使用countifs
解决的mmult
arrayFormula:
=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