数组公式混乱

Array Formula Confusion

我正在为一个数组公式苦苦挣扎,这在逻辑上似乎是合理的,但它似乎无法正常工作。我一直在研究一个复杂的 sheet,它不包括 VBA,这使得它的公式很重,而是使用数组。

在下图中,第一部分是问题所在,对于 A-F 列中显示的数据,我希望得到与 I1:K1 中的值匹配的值的总和。

我开始使用的公式也可以在第一张图片中看到,这会计算,按 F9,给我所需的输出 20,40 和 50。但是当我添加 SUM围绕公式,我只得到第一个结果。

我认为这是一个问题,因为我在这个问题上看不到树木。

提前致谢。

这个数组公式似乎有效:

=SUM((IFERROR(MATCH(A1:F1,I1:K1,0),0)>0)*A2:F2)

可能有多个更好的公式可以实现相同的目的。

但是要说说为什么会失败:

这是因为 OFFSET function returns 是一个引用而不是一个值。因此在这个数组公式中使用它 returns 引用数组 {B2,D2,E2} 而不是导致问题的值数组 {20,40,50}

如果您正在使用:

=SUMPRODUCT(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1))

然后使用计算公式,您将得到:

SUMPRODUCT({#VALUE,#VALUE,#VALUE})

在最后一步的旁边,结果为 0。所以 OFFSET 导致错误值,因为它 returns 一个引用数组,不会自动取消引用,因此每个引用都会变成 #VALUE 错误。

如果您正在使用

=SUMPRODUCT(N(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1)))

然后它工作 returns 110。所以 N 取消引用每个 OFFSET 的引用,所以整个公式导致值数组 {20,40,50} 在总和

{=SUM(N(OFFSET(A2,0,MATCH($I:$K,$A:$F,0)-1)))}

也有效。

这些问题是在数组公式中使用 OFFSETINDIRECT 等函数时出现的,其中 returns 引用而不是值。并且在 OFFSETINDIRECT 周围有一个取消引用函数可以解决问题。

同理:

=SUMPRODUCT(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE))

对比

=SUMPRODUCT(N(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE)))