Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组公式混淆_Arrays_Excel_Formula - Fatal编程技术网

Arrays 数组公式混淆

Arrays 数组公式混淆,arrays,excel,formula,Arrays,Excel,Formula,我正在努力研究一个数组公式,这在逻辑上似乎是合理的,但它似乎不能正常工作。我一直在做一个复杂的工作表,不包括VBA,这使得它的公式很重,而是使用数组 在下图中,第一部分是问题所在,对于A-F列中显示的数据,我希望得到与I1:K1中的值匹配的值的总和 我开始使用的公式也可以在第一张图中看到,这会计算,按F9键,得到所需的输出20、40和50。然而,当我在公式周围加上和时,我只得到第一个结果 我认为这是一个问题,我没有看到树木的树木在这一个 提前感谢。此数组公式似乎有效: =SUM((IFERRO

我正在努力研究一个数组公式,这在逻辑上似乎是合理的,但它似乎不能正常工作。我一直在做一个复杂的工作表,不包括VBA,这使得它的公式很重,而是使用数组

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

我开始使用的公式也可以在第一张图中看到,这会计算,按F9键,得到所需的输出20、40和50。然而,当我在公式周围加上
时,我只得到第一个结果

我认为这是一个问题,我没有看到树木的树木在这一个


提前感谢。

此数组公式似乎有效:

=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”