我有以下查询功能
=QUERY(C:J,"SELECT SUM(J) WHERE C='"&C2&"' AND H<=date'"&TEXT(H2,"yyyy-MM-dd")&"' LABEL SUM(J) ''",0)
C2和H2相对且每行上的唯一(C2,C3,C4,......和H2,H3,H4 ......)
我需要把它放到ARRAYFORMULA中,所以它会在每一行产生一些结果
我已经花了一整天的时间,用SUMIFS检查所有其他解决方案并尝试用MMULT重新编写公式,但没有任何成功。
以下是简化示例:
Proj Date Hours
APROJ 6/29/2015 81.75
APROJ 6/22/2015 80.75
BPROJ 8/3/2015 689
BPROJ 8/2/2015 656
BPROJ 8/10/2015 688
BPROJ 8/11/2015 729
CPROJ 8/12/2015 1757
我的尝试没有成功:= arrayformula(mmult((A:A = A1:A)*(B:B <= B1:B)* N(C:C),转置(符号(列(C:C) )))))
所需的专栏是:
CHECK
162.5
80.75
1345
656
2033
2762
1757
如果我输入每一行公式:= SUMIFS(C $ 2:C,A $ 2:A,“=”&amp; A2,B $ 2:B,“&lt; =”&amp; B2)它正在工作时从第二个开始手动扩展
提前致谢。
如果您想玩,请复制给自己:https://docs.google.com/spreadsheets/d/12F4EsHvkiZb5gAPVo_uosd2YpZ1nw9QED_JlSAcVQYU/edit?usp=sharing
答案 0 :(得分:1)
以下是答案:
=MMULT(TRANSPOSE(ArrayFormula(--($A$2:$A$8=TRANSPOSE(A2:A8))*--($B$2:$B$8<=TRANSPOSE(B2:B8)))),C2:C8)
此公式可以转换为更通用的公式,动态计算范围,即OFFSET(A2,,,COUNTA(A2:A))
。
<强>说明强>
我们使用mmult
函数,它本身就是一个数组函数。这是Help Center info about mmult。所以我们必须准备两个矩阵。带有条件的第一个矩阵,第二个带有Numbers的矩阵,我们已经有了。尝试输入此部分或公式以获得具有条件的矩阵:
=ArrayFormula(--($A$2:$A$8=TRANSPOSE(A2:A8))*--($B$2:$B$8<=TRANSPOSE(B2:B8)))
在这部分中,我们使用Zoros和Ones获得表格/矩阵。我更喜欢用' - '将Boolaen转换为Integer:related question
其中的转置必须用于使公式扩展。这是主要技巧。 Arrayformula不能用于比较两个垂直数组。所以你必须转置其中一个。 在你的问题中,我们有两个AND逻辑条件:A * B.所以我们将两部分条件相乘。但我认为,可以添加2个以上的条件。 如果你想制作OR条件,你需要添加它们A + B.一些例子:
结论
这对我来说是一个真正的挑战。顺便说一句,我找到了5个不同的公式来计算它,但无法将它们转换为ArrayFormula: