2014-05-16 38 views
0

我有這個小的代碼,如果該單元格有一個空的相鄰單元格,則將該單元格剪切並粘貼到另一個單元格。但每次運行此代碼時,通常需要一分多鐘才能完成整個列。這是我的小代碼。減少加載或處理在VBA中的時間

Sub MoveCell() 
Dim A As Range 

    For Each A In Range("B10:B1000") 
    If A <> "" Then 
     If A.Offset(0,2) = "" Then 
     A.Cut A.Offset(0,4) 
     End If 
    End If 
    Next 

End Sub 

是否有解決此代碼的方法?

+0

它不斷閃爍的頁面同時處理。 AutoUpdate = false會有幫助嗎? –

回答

3

設置Application.ScreenUpdating = False在循環之前和Application.ScreenUpdating = True循環之後應該停止屏幕閃爍並且可能略微提高時間。

+2

禁用屏幕更新通常是提高處理時間的最佳方法。您應該考慮使用一些錯誤處理('On Error GoTo'語句)並在其中包含重新啓用語句,以便在宏崩潰時屏幕更新不會停止。 – techturtle

4

幾點建議優化:

你真的需要全力以赴地排1000的方式嗎?現在,您每次調用此代碼時都會處理990行。最好的選擇只有在應用程序需要時才能達到最高。

相對於簡單地將單元格設置爲一個值而言,剪切和粘貼相當昂貴。使用以下代替:

If A.Offset(0,2) = "" Then 
    A.Offset(0,4) = A 

如果你還需要更多的效率,你可以將數據加載到一個變體,進行處理,並返回到表:

Dim dataVar as Variant 
Dim i as Integer 

dataVar = Range("B10:F1000") 
For i = Lbound(dataVar, 1) to Ubound(dataVar, 1) 
' Omitted code for your processing 
Next i 

Range("B10:F1000") = dataVar 
+1

對不起,重複。愚蠢的工作防火牆... – CodeJockey