允许通过VBA插入公式以适应行编号

时间:2014-01-06 10:53:02

标签: excel vba excel-vba

如何允许通过VBA插入的forumla适应行编号(即使用下面的代码插入第50000行的公式将成为GCDnm(D5000,E5000)而不是GCDnm(D6,E6)?

B列是不断添加信息的主要栏目。 J列和K列均由下面代码中的公式填充。

Sub macro2()


Dim lastrow, lastrowJ, lastrowK As Long


lastrow = Cells(Rows.Count, "B").End(xlUp).Row
lastrowJ = Cells(Rows.Count, "J").End(xlUp).Row
lastrowK = Cells(Rows.Count, "K").End(xlUp).Row

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"

End Sub

相反,我希望它像

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(Dcurrentrow,Ecurrentrow)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"
当前行的

是粘贴公式的行。

3 个答案:

答案 0 :(得分:3)

第一种方法,就是使用Resize:

Range("J" & lastrowJ + 1).Resize(lastrow - lastrowJ - 1).Formula = _
    "=GCDnm(D" & lastrowJ + 1 & ",E" & lastrowJ + 1 & ")"
Range("K" & lastrowK + 1).Resize(lastrow - lastrowK - 1).Formula = _ 
    "=LOOKUP(D" & lastrowK + 1 & ",...)"

代替

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"

下一步方法是使用自动填充(您只需要为列lastrowJ + 1的行J和列lastrowK + 1的{​​{1}}设置公式,并将它们拉长):

K

或其他方式。如果您知道Range("J" & lastrowJ + 1).Formula = _ "=GCDnm(D" & lastrowJ + 1 & ",E" & lastrowJ + 1 & ")" Range("K" & lastrowK + 1).Formula = _ "=LOOKUP(D" & lastrowK + 1 & ",...)" Range("J" & lastrowJ + 1).AutoFill _ Destination:=Range("J" & lastrowJ + 1 & ":J" & lastrow), Type:=xlFillDefault Range("K" & lastrowK + 1).AutoFill _ Destination:=Range("K" & lastrowK + 1 & ":K" & lastrow), Type:=xlFillDefault J6(例如K6)中的相对公式(没有$符号),则可以使用此方法:

=GCDnm(D6,E6)

答案 1 :(得分:0)

这在vba中是自动的。例如,您希望在列c中输入公式,其中a和b的总和如下:

Range("C1").Formula = "A1+B1"

A和B中的值是动态的,所以你得到最后一行。

lrow = Cells(Rows.Count, "A").End(xlUp).Row
Range("C1:C" & lrow).Formula = "A1+B1"

上面的代码将得到Ax + Bx的总和,其中x是C的对应行 所以不用担心。只需确定您想要公式的范围。
然后像上面一样提供第一组行的公式,并且最好去。

答案 2 :(得分:0)

要插入可识别位置的公式,请使用公式的R1C1格式

所以你的公式是(我假设)在J6中,当前是

=GCDnm(D6,E6)

成为

=GCDnm(RC[-6],RC[-5])

并将在任何J单元格中工作 - 然后Excel将其显示为相应的 GCDnm()公式。 如果您想在不必更改选项的情况下找出R1C1公式,您可以在即时窗口中打印()值:

  

?[J6] .formula
  = GCDnm(D6,E6)
  ?[J6] .formular1c1
  = GCDnm(RC [-6],RC [-5])