我当前在单元格中的公式是:
=IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&Regions&"'!AI:AI"))),"")
令人讨厌的是,当我复制时 AI:AI 不会更改参考单元格(仅向下)
我想将公式从单元格中取出并通过模块进行计算。任何想法都会很棒谢谢
我当前在单元格中的公式是:
=IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&Regions&"'!AI:AI"))),"")
令人讨厌的是,当我复制时 AI:AI 不会更改参考单元格(仅向下)
我想将公式从单元格中取出并通过模块进行计算。任何想法都会很棒谢谢
在这个公式中
=IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&Regions&"'!AI:AI"))),"")
INDIRECT
正在使用看起来像地址的字符串/文本,但由于它只是一个字符串(您可以看到它在引号中" "
),因此当它被复制到另一个单元格时它不会改变。实际上这就是INDIRECT
(它不会改变)的目的。
例子:
=SUM(A:A)
A:A
是一个真实地址,如果您将其复制到另一个单元格,该地址将会更改。=SUM(INDIRECT("A:A"))
"A:A"
是一个字符串,如果将其复制到另一个单元格,则不会更改!所以你可以通过替换来解决这个问题
INDIRECT("'"&Regions&"'!$C:$C")
和
INDIRECT("'Regions'!" & ADDRESS(1,COLUMN(C:C)) & ":" & ADDRESS(ROWS(C:C),COLUMN(C:C)))
这是如何运作的?
ADDRESS(1,COLUMN(C:C))
返回$C$1
ADDRESS(ROWS(C:C),COLUMN(C:C))
返回$C$1048576
这将$C$1:$C$1048576
与 相同C:C
。而且因为C:C
您的公式中的此处是真实地址而不是字符串,如果您将其复制过来,它将改变。
INDIRECT 是不稳定的!
请注意,这INDIRECT
是一个 volatile 函数。这意味着每次任何单元格的任何值发生变化时它都会重新计算。
例子:
=SUM(A:A)
A:A
如果值B:B
更改不会影响此公式的重新计算。=SUM(INDIRECT("A:A"))
B:B
值更改。因此,应避免大量使用 volatile 函数,因为它会大大降低工作表的速度。