0

我当前在单元格中的公式是:

=IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&Regions&"'!AI:AI"))),"")

令人讨厌的是,当我复制时 AI:AI 不会更改参考单元格(仅向下)

我想将公式从单元格中取出并通过模块进行计算。任何想法都会很棒谢谢

4

1 回答 1

1

在这个公式中

=IFERROR(SUMPRODUCT(SUMIF(INDIRECT("'"&Regions&"'!$C:$C"),$B4,INDIRECT("'"&Regions&"'!AI:AI"))),"")

INDIRECT正在使用看起来像地址的字符串/文本,但由于它只是一个字符串(您可以看到它在引号中" "),因此当它被复制到另一个单元格时它不会改变。实际上这就是INDIRECT(它不会改变)的目的。

例子:

  1. =SUM(A:A)
    A:A是一个真实地址,如果您将其复制到另一个单元格,该地址将会更改。
  2. =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 函数。这意味着每次任何单元格的任何值发生变化时它都会重新计算。

例子:

  1. =SUM(A:A)
    这只会在值更改时重新计算,A:A如果值B:B更改不会影响此公式的重新计算。
  2. =SUM(INDIRECT("A:A"))
    即使重新计算更改中的值, 这也会重新计算任何B:B值更改。

因此,应避免大量使用 volatile 函数,因为它会大大降低工作表速度。

于 2020-02-12T08:19:35.467 回答