优化此vba代码以在很短的时间内运行
我有下面的代码优化此vba代码以在很短的时间内运行,vba,for-loop,Vba,For Loop,我有下面的代码 For rptlop = 3 To ThisWorkbook.Worksheets("Raw").UsedRange.Rows.Count For sulop = 4 To ThisWorkbook.Worksheets("Calculated").UsedRange.Rows.Count If InStr(LCase(Worksheets("Calculated").Cells(sulop, 2)), LCase(Worksheets("Raw").Ce
For rptlop = 3 To ThisWorkbook.Worksheets("Raw").UsedRange.Rows.Count
For sulop = 4 To ThisWorkbook.Worksheets("Calculated").UsedRange.Rows.Count
If InStr(LCase(Worksheets("Calculated").Cells(sulop, 2)), LCase(Worksheets("Raw").Cells(rptlop, 1))) >= 1 _
And InStr(LCase(Worksheets("Calculated").Cells(sulop, 1)), LCase(Worksheets("Raw").Cells(rptlop, 2))) >= 1 _
And InStr(LCase(Worksheets("Calculated").Cells(sulop, 1)), LCase(Worksheets("Raw").Cells(rptlop, 3))) >= 1 Then
ThisWorkbook.Worksheets("Raw").Cells(rptlop, 5) = ThisWorkbook.Worksheets("Calculated").Cells(sulop, clmqtr(Worksheets("Raw").Cells(rptlop, 4)))
Exit For
End If
Next sulop
Next rptlop
我也有一个功能
Function clmqtr(myqtr) As Long
Dim suclm As Long
For suclm = 4 To ThisWorkbook.Worksheets("Calculated").UsedRange.Columns.Count
If ThisWorkbook.Worksheets("Calculated").Cells(3, suclm) = myqtr Then
clmqtr = suclm
Exit For
End If
Next suclm
End Function
在
rptlop
中,我有2900行在sulop
中,我有70000多行。如何优化此代码以在很短的时间内运行?在执行代码之前,两个直接的想法是禁用屏幕更新
,以及将计算设置为手动
。这将防止excel在代码完成之前引用屏幕并执行计算
'before your loop
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'
' your code here
'
'after your code executes, be sure to turn calculation and screen updating back on
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
您可以发布一个示例文件供我们使用吗?您可以在代码开头使用
Application.screenUpdate=False
,最后将其设置回True
,以在运行宏时禁用屏幕刷新。这可以带来惊人的性能提升一句话:在执行此操作时,最好在错误上添加转到Catch
和Catch:
块。如果代码出现错误,应用程序屏幕仍将返回。