用VBA复制Excel中的相对公式

mad*_*eye 4 excel vba

我正在尝试复制具有相对行名称和列名称的公式。

我有包含 10 个公式的基本列,我尝试在右侧的列上复制公式 5 次。

例如,在基列中,我有这个公式=A1+B1,我想使下一个单元格=B1+C1,下一个=C1+D1,依此类推。

我有这个代码

For i = 1 To Range("B1").Value
        For j = 1 To 10
            Sheet2.Cells(5 + j, 2 + i).FormulaR1C1 = "=c[-1]"
        Next j
Next i
Run Code Online (Sandbox Code Playgroud)

但这只是从左侧单元格复制值

如果公式相同但不同,那就很容易了。所以我试图找到一种方法来动态引用始终位于左侧的单元格。

这是真正的公式之一

='Balance sheet'!B13*360/'P&L'!B2
Run Code Online (Sandbox Code Playgroud)

我想要下一个单元格是

='Balance sheet'!C13*360/'P&L'!C2
Run Code Online (Sandbox Code Playgroud)

我现在的代码是下一个单元格=B3

Ron*_*eld 5

如果要将公式复制到右侧,可以通过fill运算来完成。因此,使用由基行和基列定义的单元格中的公式,并使用相对寻址(如问题中所示),只需:

Option Explicit
Sub foo()
    Const lBaseColumn As Long = 3
    Const lBaseRow As Long = 6
    Const lRpts As Long = 10

Cells(lBaseRow, lBaseColumn).Resize(columnsize:=lRpts).FillRight

End Sub
Run Code Online (Sandbox Code Playgroud)

您应该注意,FillRight如果您需要这样做,您可以一次从多行中进行操作。下面将填充 C6:C10 到 L6:L10

Option Explicit
Sub foo()
    Const lBaseColumn As Long = 3
    Const lBaseRow As Long = 6
    Const lColRpts As Long = 10
    Const lRows As Long = 5

Cells(lBaseRow, lBaseColumn).Resize(rowsize:=lRows, columnsize:=lColRpts).FillRight

End Sub
Run Code Online (Sandbox Code Playgroud)