2014-01-06 43 views
0

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

列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

而不是逐个添加公式,因为动态地在B中添加值,只需确定新范围以填写公式并在其中重新应用即可。查看我的帖子,获取简单的解释。 – L42

回答

3

第一种方法,是用调整大小:

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设置公式lastrowK + 1K,并将它们拉伸):

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 
0

也就是说在VBA自动。比如你想在C列用的总和和b输入公式是这样的:

Range("C1").Formula = "A1+B1" 
在一个

和价值观,B是动态的,所以你得到的最后一排。

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

上面的代码将导致斧+ Bx的总和,其中x是C.
的相应行 所以没必要担心。只需确定你想要的公式的范围。
然后提供仅用于上述第一组行的公式,这是很好的去。

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])