为什么 ListObject 使用绝对单元格引用自动填充公式,而不是循环代码?

Why is ListObject autopopulating formula with absolute cell references instead of looping through code?

提问人:FionaFire 提问时间:10/19/2023 最后编辑:Mayukh BhattacharyaFionaFire 更新时间:10/20/2023 访问量:38

问:

我有一个命名表(ListObject),我正在尝试使用循环函数用公式填充它。在我的表格中,我在 D 列中有一个价格,在“E:P”列中有一个空白单元格,代表一年中的月份。这些列用于用户输入。

我希望在“Q:AB”列中填充每个月的价格和产品#的乘积,以给出每个月的总成本,如果用户更改了“E:P”列中的任何值,则可以更改此值。例如,“Q2”的输出 vba 公式应为“$D 2*E2”。然后它会为包含价格的每一行计算这个数字(通常为十行,每行是不同的价格)。

我不知道为什么,但我的输出单元格(“Q2:AB10”)都完全相同:“$D$2*$E$2”

我尝试使用范围而不是 cell.addresses,但是(可能是因为我试图循环的变量?我一直收到错误1004。此代码运行,但即使它正在循环,它似乎也没有更改输出。我正在使用的特定代码如下所示:

With Worksheets (i) 'this is defined farther up in the sub
  lrow2 = .Range("A" & Rows.Count).End(xlUp).row 'find last row
  col = Range("D" & lrow2).Column 'find correct column

'Confirm cells' address reference correct cells
  Debug.Print (Cells(lrow2 + 1, 4).Address)
  Debug.Print (Cells(lrow2 + 1, col + 1).Address)
  Debug.Print (Cells(lrow2 + 1, col + 13).Address)

For c = col  To col + 12
  Cells(lrow2 + 1, c + 13).Formula = "=" & Cells(lrow2 + 1, 4).Address & "*" & Cells(lrow2 + 1, c + 1).Address
Next c

我需要代码是动态的以接受额外的行(一次 10 行),但列将保持不变,我只是没有足够的经验来知道解决这个问题的最佳方法。

Excel VBA 循环 数组公式

评论

0赞 Shai Rado 10/19/2023
如果您使用的是语句,则应使用而不是 ' Cells(lrow2 + 1, c + 13)Address' 添加,这样您就不会获得绝对引用。With.Cells(lrow2 + 1, c + 13). Also after (False, False, xlA1)
0赞 FionaFire 10/19/2023
我确实尝试过用 .单元格,但这并没有改变我得到的结果
0赞 Shai Rado 10/19/2023
试试我下面答案中的代码
0赞 FionaFire 10/19/2023
啊,添加 False、False、xlA1 就成功了。非常感谢!

答:

1赞 Shai Rado 10/19/2023 #1

要了解有关属性的更多信息,请参阅此链接:Range.Address

Range.Address 属性

修改:

Cells(lrow2 + 1, c + 13).Formula = "=" & Cells(lrow2 + 1, 4).Address & "*" & Cells(lrow2 + 1, c + 1).Address

跟:

.Cells(lrow2 + 1, c + 13).Formula = "=" & .Cells(lrow2 + 1, 4).Address(False, True, xlA1) & "*" & .Cells(lrow2 + 1, c + 1).Address(False, False, xlA1)