减少加载或处理VBA中的时间

时间:2014-05-16 17:09:43

标签: excel vba excel-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

这段代码有办法吗?

2 个答案:

答案 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应该会停止屏幕闪烁并且可能会稍微改善时间。