2016-03-01 62 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