数组公式混淆
我正在努力与arrays公式,这似乎是合理的声音,但它似乎没有正常工作。 我一直在做一个复杂的工作表,不包括VBA,这使得它的公式很重,并使用数组。
在下图中,第一部分是问题,对于列AF中显示的数据,我希望得到与I1:K1中的值相匹配的值的总和。
我以前用过的公式也可以在第一个图像中看到,这个评估按F9,给我所需的输出20,40和50.但是当我在公式周围加上SUM
,我只得到第一个结果出来。
我认为这是一个问题,我没有看到这棵树的木材。
提前致谢。
这个数组公式似乎工作:
=SUM((IFERROR(MATCH(A1:F1,I1:K1,0),0)>0)*A2:F2)
有可能有多个更好的公式来实现相同的事情。
但要谈论为什么这会失败:
这是因为OFFSET函数返回一个引用而不是一个值。 因此,在这个数组公式中使用它将返回一个引用数组{B2,D2,E2}
而不是导致问题的值数组{20,40,50}
。
如果您正在使用:
=SUMPRODUCT(OFFSET(A2,0,MATCH($I$1:$K$1,$A$1:$F$1,0)-1))
然后使用评估公式,你会得到:
SUMPRODUCT({#VALUE,#VALUE,#VALUE})
在接近最后一步,结果是0。 所以OFFSET
导致错误值,因为它返回一个不会被自动解引用的引用数组,所以会变成#VALUE
错误。
如果你正在使用
=SUMPRODUCT(N(OFFSET(A2,0,MATCH($I$1:$K$1,$A$1:$F$1,0)-1)))
那么它就起作用并返回110.所以N
取消每个OFFSET
的引用,所以整个公式导致一组值{20,40,50}
。
{=SUM(N(OFFSET(A2,0,MATCH($I$1:$K$1,$A$1:$F$1,0)-1)))}
也是如此。
这些问题使用像OFFSET
和INDIRECT
这样的函数,它在数组公式中返回引用而不是值。 在OFFSET
或INDIRECT
周围有一个解引用函数可以解决问题。
这是一样的:
=SUMPRODUCT(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE))
与
=SUMPRODUCT(N(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE)))