Excel公式对单元格引用的上下文处理

时间:2017-07-13 10:56:26

标签: excel-formula

有人可以向我解释为什么这个公式有效:

={SUMPRODUCT((INDIRECT("TabName!"&A1&":a16"))*1)}

其中:

A1 = ADDRESS(8,COLUMN(),1,1) = $A$8

但这不是:

={SUMPRODUCT((INDIRECT("TabName!"&ADDRESS(8,COLUMN(),1,1)&":a16"))*1)} 

= #Value!

公式在A列中,因此解析与A1相同。

Excel显然根据上下文不同地处理相同公式的结果 - 要么引用另一个单元格(A1)中的结果,要么将其合并到公式本身中。

我甚至不知道从研究这种现象开始寻找什么,所以如果之前已经多次解释过,请原谅我。

有解决方案吗?我真的不想使用单元格来计算仅供其他公式使用的单元格引用。

此外,上面是一个较大的论坛的摘录,所以我很欣赏它的逻辑是没有意义的。

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,SUMPRODUCT是数组公式SUM的特例。所以当你写

=SUMPRODUCT((INDIRECT("Sheet8!"&ADDRESS(8,COLUMN(),1,1)&":a16"))*1)它将Column()视为数组,而不是给您1,而是{1},这会导致评估如下:

  

=SUMPRODUCT((INDIRECT("Sheet8!"&ADDRESS(8,COLUMN(),1,1)&":a16"))*1)   =SUMPRODUCT((INDIRECT("Sheet8!"&ADDRESS(8,{1},1,1)&":a16"))*1)   =SUMPRODUCT((INDIRECT("Sheet8!"& {"$A$8"} &":a16"))*1)   =SUMPRODUCT((INDIRECT({"Sheet8!$A$8:a16"}))*1)
  =SUMPRODUCT((INDIRECT({*#VALUE!*"}))*1)

因此,INDIRECT({"Sheet8!$A$8:a16"})会为您提供 #VALUE 错误。

其次,如果您使用sum评估相同的公式

=SUM((INDIRECT("Sheet8!"&ADDRESS(8,COLUMN(),1,1)&":a16")))

Column()将为您提供1而非{1},就像 SUMPRODUCT 一样,您将获得所需的结果。