允许通过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(....)" 

对于当前行是公式被粘贴的行。

第一种方法是使用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(....)" 

下一步的方法是使用自动填充(只需要在列J设置公式行lastrowJ + 1 ,为K列设置公式为lastrowK + 1 ,并将其拉伸):

 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 

或者另一种方式 。 如果您知道在J6K6 (例如=GCDnm(D6,E6) )中有相对公式(不带$符号),则可以使用此方法:

 Range("J6").Copy Range("J" & lastrowJ + 1 & ":J" & lastrow).PasteSpecial xlPasteFormulas Range("K6").Copy Range("K" & lastrowK + 1 & ":K" & lastrow).PasteSpecial xlPasteFormulas Application.CutCopyMode = False 

这在vba中是自动的。 例如,您想要在列c中input公式a和b,如下所示:

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

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

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

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

要插入位置感知的公式,请使用公式的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])