下面是我的代码片段:
For i = 1 To k
If Range("D2").Offset(i, 0).Interior.ColorIndex > 0 Then
Else
Range("D2").Offset(i, 0).Formula = Range("D2").Formula
D2 中的公式是
=IF(F2<0,6;5;IF(F2<0,9;10;22))
问题是 D 列中的所有单元格都使用相同的公式。我该如何更改它,使其像在 Excel UI 中一样自动调整(例如 F2 变为 F3 等等)
答案1
公式属性完全按照指定的方式采用公式。它对调整引用一无所知。您需要使用字符串操作来修复复制的公式,然后再将其设置在新单元格中。
或许,最好只是在代码中构建公式,而不是复制它并尝试修复它。
答案2
如果出于特定原因需要使用 Excel 的自动填充功能(也许您不知道公式是什么并且想让代码保持简单),您可以使用该Filldown
函数。
但是,您需要确保计算模式 ( CalcMode
) 设置为自动 ( xlCalculationAutomatic
)。
Range(Range("D2").Address & ":" & Range("D2").Offset(k, 0).Address).FillDown
注意:上面的代码应该从循环中取出for
。
答案3
最好从单元格中分离出 IF 函数并在 VBA 中对其进行编码。
如果我正确理解了你的 IF 函数(我知道你没有使用按照标点符号模型的英文版本)它在 VBA 中看起来像这样:
If Range("D2").Offset(i, 2) < 0.6 Then
Range("D2").Offset(i, 0) = 5
ElseIf Range("D2").Offset(i, 2) < 0.9 Then
Range("D2").Offset(i, 0) = 10
Else
Range("D2").Offset(i, 0) = 22
End If
这将替换代码中的此行:
Range("D2").Offset(i, 0).Formula = Range("D2").Formula
我使用 offset(i,2) 来引用 F2 中查询的列。