我有这个小代码,如果单元格有一个空的相邻单元格,它会将单元格剪切并粘贴到另一个单元格。但每次运行此代码时,通常需要一分多钟才能完成整个列。这是我的小代码。
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 :(得分:4)
有关优化的一些建议:
你真的需要一路走到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
答案 1 :(得分:3)
在循环之前设置Application.ScreenUpdating = False
并在循环之后设置Application.ScreenUpdating = True
应该会停止屏幕闪烁并且可能会稍微改善时间。