2016-03-01 65 views
2

我正在嘗試在單元格範圍內添加和複製公式,然後粘貼這些值。目前,我的代碼有效,但運行時間太長。你知道更有效的方式來實現我的目標嗎?我在3.69分鐘內將公式粘貼在77,000個單元格上。更有效地粘貼整個範圍的公式和值?

Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Application.EnableEvents = False 

Dim ws As Worksheet, Lastrow As Long 
Set ws = Sheets("Sheet1") 
With ws 
Lastrow = ws.Range("A" & Rows.Count).End(xlUp).Row 
.Range("CS1").Value = "Actual Bonus - Amount" 
.Range("CS2").Formula = "=SUMIF(Table7[ID],table3[ID],Table7[Actual])" 
.Range("CS2").Copy 
.Range("CS3:CS" & Lastrow).PasteSpecial xlPasteFormulas 
End With 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
Application.EnableEvents = True 
End Sub 

謝謝!

+2

可以直接給公式的整個範圍:'.Range( 「CS2:CS」 &LASTROW).Formula =「= SUMIF(表7 [ID],表3 [ID],表7 [實際] )「' – Kyle

+1

如果在處理sumifs時出現內存中的嘗試,您將不得不提供15-20行樣本數據。 – Jeeped

+0

將公式分配到整個範圍比較慢。 – Chris2015

回答

1

您可以使用.FillDown將公式放入下面的單元格中,而無需複製/粘貼。

Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Application.EnableEvents = False 

Dim ws As Worksheet, Lastrow As Long 
Set ws = Sheets("Sheet1") 
With ws 
Lastrow = ws.Range("A" & Rows.Count).End(xlUp).Row 
.Range("CS1").Value = "Actual Bonus - Amount" 
.Range("CS2").Formula = "=SUMIF(Table7[ID],table3[ID],Table7[Actual])" 
.Range("CS2:CS" & Lastrow).FillDown 
End With 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
Application.EnableEvents = True 
End Sub 
+0

.FillDown在〜3.31分鐘處表現稍好。任何其他想法?謝謝。 – Chris2015

+0

給出解決方案@Kyle在上面的評論中張貼一個試試看看是否更快。除此之外,我不知道任何其他更有效的方法來添加許多公式。 – Toast