如何允许通过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(....)"
当前行的是粘贴公式的行。
答案 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])