Arrays 数组公式混淆
我正在努力研究一个数组公式,这在逻辑上似乎是合理的,但它似乎不能正常工作。我一直在做一个复杂的工作表,不包括VBA,这使得它的公式很重,而是使用数组 在下图中,第一部分是问题所在,对于A-F列中显示的数据,我希望得到与I1:K1中的值匹配的值的总和 我开始使用的公式也可以在第一张图中看到,这会计算,按F9键,得到所需的输出20、40和50。然而,当我在公式周围加上Arrays 数组公式混淆,arrays,excel,formula,Arrays,Excel,Formula,我正在努力研究一个数组公式,这在逻辑上似乎是合理的,但它似乎不能正常工作。我一直在做一个复杂的工作表,不包括VBA,这使得它的公式很重,而是使用数组 在下图中,第一部分是问题所在,对于A-F列中显示的数据,我希望得到与I1:K1中的值匹配的值的总和 我开始使用的公式也可以在第一张图中看到,这会计算,按F9键,得到所需的输出20、40和50。然而,当我在公式周围加上和时,我只得到第一个结果 我认为这是一个问题,我没有看到树木的树木在这一个 提前感谢。此数组公式似乎有效: =SUM((IFERRO
和
时,我只得到第一个结果
我认为这是一个问题,我没有看到树木的树木在这一个
提前感谢。此数组公式似乎有效:
=SUM((IFERROR(MATCH(A1:F1,I1:K1,0),0)>0)*A2:F2)
可能有多个更好的公式可以实现同样的效果 但要谈谈这一失败的原因: 这是因为返回的是引用而不是值。因此,在这个数组公式中,它返回一个引用数组
{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。因此,偏移量
会导致错误值,因为它返回一个不会自动取消引用的引用数组,因此每次都会成为值
错误
如果您正在使用
=SUMPRODUCT(N(OFFSET(A2,0,MATCH($I$1:$K$1,$A$1:$F$1,0)-1)))
然后它工作并返回110。因此,N
取消了对每个偏移量的引用
,因此整个公式得出了一个值数组{20,40,50}
{=SUM(N(OFFSET(A2,0,MATCH($I$1:$K$1,$A$1:$F$1,0)-1)))}
也行
这些问题是通过使用OFFSET
和INDIRECT
等函数出现的,它们在数组公式中返回引用而不是值。在偏移量
或间接
周围使用解引用功能可以停止问题
这与:
=SUMPRODUCT(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE))
对
=SUMPRODUCT(N(INDIRECT("R2C"&MATCH(I1:K1,A1:F1,0),FALSE)))
我不明白为什么只是不稳定就意味着它不会在每一步都进行评估?此外,当OP使用evaluate时,他们似乎看到了正确的值(而不是
#VALUE
)?@CallumDA:按F9
与使用evaluate公式不同。按F9
可获得偏移量
零件的{20,40,50}
。但是,整个SUMPRODUCT
结果为0,求值公式显示了原因-OP不使用SUMPRODUCT()
。如果使用了SUMPRODUCT()
,则通过评估获得#值。遗憾的是,我们不知道为什么易失性函数会这么做…:(我的理解是,问题更多地与以下事实有关:OFFSET通常返回一个范围而不是一个值,当您在OFFSET中提供一个数组作为列参数时,结果是一个“范围数组”。在这种情况下,N函数将“反引用”范围。其他可以计算这种“范围数组”的函数通常是只接受范围的函数,例如COUNTBLANK、COUNTIF和subtotal。我认为这个问题对将来的读者很有用,但可以用一个更好的标题。可能类似于“带数组条件的SUMIF”