我当前在单元格中的公式是:
=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
是易失函数。这意味着它会在每次单元格变化的任何值时重新计算。示例:
=SUM(A:A)
仅当A:A
中的值发生更改时,如果B:B
中的值发生更改,它不会影响此公式的重新计算。=SUM(INDIRECT("A:A"))
即使B:B
中的值发生更改,它也会重新计算