可以在动态(溢出)范围和 return 一个(2d)数组上做一个 sumif(s)吗?

Can one do a sumif(s) on a dynamic (spilled) range and return a (2d) array?

只是好奇是否可以从 excel 中的 sum 或 sumif 公式获得溢出范围输出。给定一个二维数组,我想对一些行求和但保留列。我担心的是,一旦将 sum 或 sumif 添加到溢出公式(序列、过滤器等)中,就会失去溢出效果。我这样做的兴趣是在输入 table 改变大小时保持 tables 自动更新。

一张图片可能对此进行了最好的描述:我的 table 有一些行带有一些重复的标签;我想将它们折叠成具有独特行标签的较短的 table。例如,B 和 D 行重复,这些行应在最终输出中求和。 (此处示例中的输出是手动完成的,我在输出的每个 row/column 中做了一个求和。)

非常感谢!

使用 MAKEARRAYLAMBDA 函数是可能的。

公式如下:

=MAKEARRAY(
   ROWS(F3#),
   COLUMNS(G2#),
   LAMBDA(
      r,
      c,
      SUM(
          B3:D10 * 
          --(A3:A10=INDEX(F3#,r)) * 
          --(B2:D2=INDEX(G2#,1,c))
      )
   )
)

MAKEARRAY公式通过前两个参数ROWS(F3#)COLUMNS(G2#)跨越一个具有所需行数和列数的数组(注意F3# = F3:F8G2# = G2:I2).

MAKEARRAY 的第三个参数采用 LAMBDA 函数,并为其前两个参数提供行数 r 和列数 c

LAMBDA的第三个参数在这里取SUM函数来模拟SUMIFS计算。它具有三个因素:

  1. 数据范围B3:D10
  2. 行条件--(A3:A10=INDEX(F3#,r))
  3. 栏目条件--(B2:D2=INDEX(G2#,1,c)) 无论是否适用,2) 和 3) 中的条件都会导致 1 或 0。因此 SUM 在匹配的地方计算一个值,在不匹配的地方计算 0。此外,2)和3)中的公式是使用行号r和列号cINDEX来获得条件值。