2014-01-06 148 views
1

我正在使用excel進行某些處理工作。我有大約250,000行數據跨越幾列,因此處理過程需要幾分鐘的時間。總是添加新的數據行,因此,要運行宏,B列的最後一行將被採用。這樣可以將下面的公式粘貼爲x行。從最後一行到最後一行的粘貼公式

Sub macro2() 


Dim lastrow As Long 


lastrow = Cells(Rows.Count, "B").End(xlUp).Row 

Range("J6:J" & lastrow).Formula = "GCDnm(D6,E6)" 
Range("K6:K" & lastrow).Formula = "LOOKUP(....)" 

End Sub 

有沒有辦法讓這段代碼更有效率?例如,每次運行宏時,不要將公式從J6或K6粘貼到最後一行(J250000或K250000)?有沒有辦法通過它將公式從J230000粘貼到J250000?

回答

1

是的,你可以,你只需要檢測柱的LASTROWĴ&ķ

試試這樣的事情:

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 

希望工程:)

+0

非常感謝!這工作完美〜! :D –

+0

很好用!祝你有個美好的一天:) – Milanor

+0

我有最後一個問題。看來,當代碼從J230000粘貼到J250000時,插入的公式從第6行開始(即GCDnm(D6,E6)被粘貼到J23000而不是GCDnm(D230000,E230000)。我們如何解決? –

0

由於限制評論部分,我需要將其發佈到答案部分。

好吧,首先,我想你想的公式,從第6行。

首發如果使用.Formula功能,使細胞內的公式將是靜態的(相同字符串過去等號裏面寫什麼)。

有兩種方法做到這一點:

首先,你可以使用來自lastrowJ循環,直到LASTROW這樣的:

For i = lastrowJ + 1 to lastrow 
    Range("J" & i).Formula = "GCDnm(D" & i & ",E" & i)" 
Next 

做塔K相同。

的第二種方法是通過使用.Paste方法,其中,將像這樣做複製和粘貼手動基於Excel(行會自動提高到跟隨推崇行)實施例:

Range("J1").Select 
    Selection.Copy 
Range("J" & lastrowJ+1 & ":J" & lastrow).Select 
    ActiveSheet.Paste 

然而,後者方法並沒有反映出良好的編程實踐,並且我更喜歡使用前面提到的方法而不是後者。

相關問題