Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用VBA编码执行SumIf或SumProduct函数,以对多张工作表中的帐户进行求和_Excel_Vba_Excel Formula_Sumifs_Sumproduct - Fatal编程技术网

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)))