Excel 如何使用VBA编码执行SumIf或SumProduct函数,以对多张工作表中的帐户进行求和
我在单元格中的当前公式是:Excel 如何使用VBA编码执行SumIf或SumProduct函数,以对多张工作表中的帐户进行求和,excel,vba,excel-formula,sumifs,sumproduct,Excel,Vba,Excel Formula,Sumifs,Sumproduct,我在单元格中的当前公式是: =IFERROR(SUMPRODUCT(SUMIF(间接(“”&Regions&“!$C:$C”)、$B4、间接(““&Regions&”!AI:AI”)、”) 恼人的是AI:AI在复制时不会改变参考单元格(仅向下) 我想把公式从单元格中取出来,让它通过一个模块来计算。任何想法都会很棒,谢谢这个公式 =IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&am
=IFERROR(SUMPRODUCT(SUMIF(间接(“”&Regions&“!$C:$C”)、$B4、间接(““&Regions&”!AI:AI”)、”)
恼人的是AI:AI在复制时不会改变参考单元格(仅向下)
我想把公式从单元格中取出来,让它通过一个模块来计算。任何想法都会很棒,谢谢这个公式
=IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&Regions&"'!AI:AI"))),"")
INDIRECT
使用的字符串/文本看起来像一个地址,但因为它只是一个字符串(你可以看到它在引号中”
),所以在复制到另一个单元格时它不会改变。实际上,这就是间接
的目的(即不会改变)
例如:
=总和(A:A)
这里的
A:A
是一个真实地址,如果您将其复制到另一个单元格,它将发生变化=总和(间接(“A:A”)
这里的
“A:A”
是一个字符串,如果您将其复制到另一个单元格中,该字符串将不会改变李>
因此,您可以通过替换
INDIRECT("'"&Regions&"'!$C:$C")
与
这是怎么回事?
返回地址(1,列(C:C))
$C$1
返回地址(行(C:C),列(C:C))
$C$1048576
$C$1:$C$1048576
,与C:C
相同。因为公式中的C:C
是一个真实地址,而不是字符串,如果你复制它,它会改变
间接是不稳定的强>
请注意,间接
是一个易失性函数。这意味着每当任何单元格的任何值发生更改时,它都会重新计算
例如:
=总和(A:A)
只有当
a:a
中的值发生变化时才会重新计算,如果B:B
中的值发生变化,则不会影响此公式的重新计算=总和(间接(“A:A”)
即使
B:B
中的某个值发生了更改,这也会在任何值更改时重新计算因此,应避免大量使用volatile函数,因为它会大大降低工作表的速度请查看它提供了单元格公式中可用的所有方法。自己尝试一些东西,如果遇到问题或错误,请返回您尝试的代码并向其提出问题(请参阅)。•对于您的问题,显然,
AI:AI
不会被更改,因为它不是地址,而是INDIRECT
中使用的字符串。我们希望提供帮助,但还需要更多详细信息,即您到底想实现什么。示例是受欢迎的,因为它不容易从文本中理解。
INDIRECT("'Regions'!" & ADDRESS(1,COLUMN(C:C)) & ":" & ADDRESS(ROWS(C:C),COLUMN(C:C)))