Google表格自动重复使用arrayformula()

时间:2016-04-14 15:49:44

标签: google-sheets

根据这个sample data,我有这个公式,它给出了一个主要问题的准确结果......它没有自动填充到新行

=arrayformula(if(countif(filter(G$2:G,A$2:A=A2,B$2:B=B2),">"&G2)>0,countif(filter(G$2:G,A$2:A=A2,B$2:B=B2),">"&G2),COUNTIF(filter(E$2:E,A$2:A=A2,B$2:B=B2),"Finished")))

我尝试过这个公式,看看它是否会自动填充到新行......

=arrayformula(IF(ISNA(A2:A),,if(countif(filter(G$2:G,A$2:A=A2,B$2:B=B2),">"&G2)>0,countif(filter(G$2:G,A$2:A=A2,B$2:B=B2),">"&G2),COUNTIF(filter(E$2:E,A$2:A=A2,B$2:B=B2),"Finished"))))

...上面的公式确实自动填充;但是,每个值都是1而不是正确的值。

我尝试了一个简单的公式,它不能完成上述所做的一切,但可能有助于排除故障。我怀疑上面的公式只是一遍又一遍地显示第一行的结果。为了测试我尝试了这个公式...

=arrayformula(IF(ISNA(A2:A),,indirect("g"&ROW(indirect("g2:g"&counta(G2:G))))))

...事实证明,上面的公式确实将G2的结果显示在每一行中。如果我能找出原因,我相信我可以将解决方案中的概念转化为这个简单的公式,并将其添加到上面更复杂的公式中。

1 个答案:

答案 0 :(得分:1)

请试试这个公式:

=ArrayFormula(if(
 mmult(
  --(A2:A=TRANSPOSE(A2:A))*
  --(B2:B=TRANSPOSE(B2:B))*
  --(G2:G<TRANSPOSE(G2:G)),
  row(A2:A)^0)>0,
 mmult(
  --(A2:A=TRANSPOSE(A2:A))*
  --(B2:B=TRANSPOSE(B2:B))*
  --(G2:G<TRANSPOSE(G2:G)),
  row(A2:A)^0),
 mmult(
  --(A2:A=TRANSPOSE(A2:A))*
  --(B2:B=TRANSPOSE(B2:B)),
  --(E2:E="Finished"))
 )
)

警告!它运行缓慢,因此最好删除工作表中的空白行。更好地分两步使用这个公式。第1步公式:

=ArrayFormula(mmult(--(A2:A=TRANSPOSE(A2:A))*
--(B2:B=TRANSPOSE(B2:B))*
--(G2:G<TRANSPOSE(G2:G)),
row(A2:A)^0))

步骤2公式:

=ArrayFormula(mmult(--(A2:A=TRANSPOSE(A2:A))
*--(B2:B=TRANSPOSE(B2:B)),
--(E2:E="Finished")))

开放范围重载此公式。如果你使用它也可以更快地工作:

  • offset(E2,,,counta(E2:E))代替E2:E