2014-01-06 42 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])