具有多个条件的ARRAYFORMULA总和

时间:2018-07-22 07:48:28

标签: google-sheets array-formulas

假设您有按开始日期和部门列出的员工列表。您想创建一个ARRAYFORMULA来按月计算每个部门like in this sheet的总工资成本。这几个月将花费数年,因此想使用ARRAYFORMULA

正在寻找G2的ARRAYFORMULA,它将处理第二个月的所有销售行的计算。然后可以将该公式复制到G3和G4中,以处理其他部门。

您不能在SUMIFS内使用QUERYARRAYFORMULA。由于您需要使用少于日期的日期来计算总数,因此不能将SUMIF与复合键一起使用。我尝试在FILTER内的SUMIF内使用ARRAYFORMULA,但似乎无法在FILTER内使用SUMIF

是否有人建议创建一个ARRAYFORMULA函数来处理仍然足够浓缩以进行管理的功能?

2 个答案:

答案 0 :(得分:0)

就像我说的那样,很多事情令人困惑,但是您可以通过生成对角矩阵来实现

1   1   1   1
0   1   1   1
0   0   1   1
0   0   0   1

并将其与常规数据透视查询的结果相乘,这样就得到了第一列,前两列的总和,前三列,等等。

=ArrayFormula(if(isnumber(query(A:D,"select B,sum(D) where B <> '' group by B pivot C",1)),
mmult(n(query(A:D,"select B,sum(D) where B <> '' group by B pivot C",1)),
if(column(indirect("A1:"&address(countunique(C:C),countunique(B:B))))>=row(indirect("A1:"&address(countunique(C:C),countunique(B:B)))),1,0)),
query(A:D,"select B,sum(D) where B <> '' group by B pivot C",1)
))

enter image description here

这是否满足“足以管理的凝聚力”标准是另一回事。

替代

如果您可以在G,H,I等列中容忍一个单独的公式,这是另一种方法。我仍将使用查询,但问题是,如果某个部门不在特定日期范围内,则H,I列中的类别将少于G列中的类别,并且它们将不匹配起来经过深思熟虑的简单答案是,在输入查询之前将超出范围的值设置为零,这样对于G2,您就有了

=sort(unique(B2:B))

按字母顺序排列部门名称

然后在H2中

=ArrayFormula(query({$A:$C,$D:$D*($C:$C<=H1)},"select sum(Col4) where Col1 <>'' group by Col2 label sum(Col4) ''"))

然后将其拉入I,J等列中。

看看这是否适合您。

enter image description here

答案 1 :(得分:0)

尝试以下公式:

  1. { "mythings": [ { "name": "Name", "subjects": ['x'], "id": 2 } ], } 中输入此ArrayFormula:
    F1

    enter image description here

  2. 然后将其复制到= ArrayFormula(IFERROR( INDEX( TRANSPOSE( $C$1:$C$14 ), MATCH( 1, 1 + COUNTIF( E1:$E1, TRANSPOSE( $C$1:$C$14 ) ) + ( TRANSPOSE( $C$1:$C$14 ) = "" ), 0 ) ), "|" ))

    enter image description here

  3. G1:K1中输入此ArrayFormula:
    F2

    enter image description here

  4. 然后将其复制到= ArrayFormula(IFERROR( INDEX( $B$1:$B$14, MATCH( 1, 1 + COUNTIF( F$1:F1, $B$1:$B$14 ) + ( $B$1:$B$14 = "" ), 0 ) ), "_" ))

    enter image description here

  5. F3:F7中输入以下标准公式:
    G3

    enter image description here

  6. 然后将其复制到=IF( OR( EXACT( G$1, "|" ), EXACT( $F3, "_" ) ), "", SUMIFS( $D$1:$D$14, $B$1:$B$14, $F3, $C$1:$C$14, "<=" & G$1 ) )

    enter image description here