在 VBA 中设置公式属性时如何更新单元格引用?

在 VBA 中设置公式属性时如何更新单元格引用?

下面是我的代码片段:

 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 中查询的列。

相关内容