【问题标题】:Copy relative formula in excel with VBA使用VBA在excel中复制相对公式
【发布时间】:2015-09-22 18:28:35
【问题描述】:

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

我有 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

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

如果公式相同但它们不同,那将很容易。所以我试图找到一种方法来动态引用总是左单元格。

这是真正的公式之一

='Balance sheet'!B13*360/'P&L'!B2

我希望下一个单元格是

='Balance sheet'!C13*360/'P&L'!C2

我现在有了代码,下一个单元格是=B3

【问题讨论】:

  • 如果在三个相邻的水平单元格中输入=A1+B1=B1+C1=C1+D1,就Excel而言,它是相同的公式(在R1C1表示法中看起来相同)。请提供有关您的工作表布局的更多详细信息。
  • 把它变成你的等式"=r[0]c[-1] + r[0]c[0]"
  • @ScottCraner 我正在尝试使公式动态化。这不仅是公式,我有 10 个不同的公式,它们都显示在基列中。
  • @GSerg 我已经更新了问题并提出了真正的公式。请注意,这只是其他 10 个中的一个,总而言之,我只想将单元格引用向右移动一个位置,就是这样。
  • ='Balance sheet'!B13*360/'P&L'!B2='Balance sheet'!C13*360/'P&L'!C2 如果它们位于水平相邻的单元格 @housefrommars 中,则它们是相同的公式。要将此公式复制到右侧,请分配 NewCell.FormulaR1C1 = OldCell.FormulaR1C1

标签: vba excel


【解决方案1】:

如果您想将公式复制到右侧,可以使用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

您应该注意,如果您需要这样做,您可以一次从多行中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

【讨论】:

    【解决方案2】:

    这两行将从左侧单元格复制公式/内容并复制到参考单元格中。这也将复制具有相对引用的公式

    Range(refCellID).Offset(0,-1).Copy
    Range(refCellID).PasteSpecial
    

    【讨论】:

    • 这不会翻译相对引用。它将它们作为绝对参考。因此,如果我从中复制的单元格具有对 D5 的引用,并且我将其粘贴到下面的行中,则引用仍然是 D5
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2021-03-29
    • 2017-08-20
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多