Excel:什么决定了公式中的评估顺序?

我有一个工作表,在A1:G1中具有以下内容

7 8 4 2 9 11 10 

 =SUMPRODUCT(MIN($B1:$G1-$A1)) (1) 

评估为-5,

 =SUMPRODUCT(ABS($B1:$G1-$A1)) (2) 

评估为18

 =SUMPRODUCT(MIN(ABS($B1:$G1-$A1))) (3) 

赋予#VALUE!

为了理解这个问题,我使用了公式审计 – >评估公式。 在工作的公式(1和2)中,首先评估(下划线)$ A1。 在不起作用的公式(3)中,首先评估(下划线)$ B1:$ G1。

错误的原因是什么,以及公式之间的不同行为?

根据我的评论,为了获得A1和B1之间的最小差异:G1,而不使用“数组input”公式,你可以使用INDEX来做SUMPRODUCT要做的事情,即

=MIN(INDEX(ABS($B1:$G1-$A1),0))

它看起来像您正在使用SUMPRODUCT函数来使此公式作为数组公式工作,Excel不会将您的第三个公式作为数组计算,给公式input列A时给您一个#VALUE错误。它没有给我在列B到G这个错误,但它也没有计算为一个数组。 在公式中input公式作为数组公式,通过在公式中input后按下Shift + Ctrl + Enter将会解决这个问题。 您也可以使用更简单的公式得到相同的结果:

 =MIN(ABS($B1:$G1-$A1)) 

一旦以数组公式的formsinput,您将能够逐步完成评估,并看到它正常工作。

更多信息在这里数组: http : //office.microsoft.com/en-us/excel-help/introducing-array-formulas-in-excel-HA001087290.aspx

总结布拉德和巴里霍迪尼 ( 原来是这样 )的评论:

该文件说, ABS采取一个数字作为其input, MIN采取任意数量的数字, SUMPRODUCT采取任意数字或数组。 看起来像ABS嵌套如此之深,它默认采取的数字,并不知道如何返回一个数组。

因此,为了抵消这一点,我们可以使用INDEX轮回ABS并获得没有“数组input”和没有SUMPRODUCT ,即=MIN(INDEX(ABS($B1:$G1-$A1),0))

这显示了input公式的正确方法,并解释了错误的原因。

我想你当然要用“公式>评估公式”

结果是典型的math运算:function从内到外进行评估。

因为=SUMPRODUCT(MIN(ABS($B1:$G1-$A1)))不会被强制作为一个数组来计算$B1:$G1将返回来自调用单元所在的同一列的数组的值。 即如果B2 =然后$B1:$G1将返回B1,如果A2 = $B1:$G1那么它将尝试返回A1,但没有什么可以返回,所以它给你#VALUE错误。