减lessVBA中的加载或处理时间

我有这个小的代码,如果这个单元格有一个空的相邻单元格,它就会把这个单元格粘贴到另一个单元格中。 但是每次运行这个代码时,通常需要一分多钟才能完成整个列。 这是我的小代码。

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 

有没有解决这个代码的方法?

在循环和Application.ScreenUpdating = True之前设置Application.ScreenUpdating = False循环应该停止屏幕闪烁并且可能稍微改善时间。

一些优化build议:

你真的需要一路走到1000排? 现在,您每次调用此代码时都会处理990行。 最好的只有在你的应用程序需要的时候才可以。

相对于简单地将单元格设置为一个值,剪切和粘贴相当昂贵。 请改用以下内容:

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

如果您仍然需要更高的效率,则可以将数据加载到Variant中,对其进行处理,然后将其返回到工作表:

 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