【发布时间】:2015-05-12 05:27:47
【问题描述】:
我有一个将数据从一列移动到另一列的宏,这个宏需要很长时间才能运行(大约 25-30 分钟)。 excel表格中的数据大约有200,000行。因为我有大约 500 张 excel 表,如果运行速度这么慢,我可能需要数周时间来清理文件,有没有更好的方法来做类似的事情,可以花费更少的时间。
Sub J_PriceAdjust()
Dim J As Range
Dim r As Range
Set J = Intersect(ActiveSheet.UsedRange, Range("J:J"))
' Working on Column J
For Each r In J
If Left(r.Text, 4) = "Page" Then
r.Copy r.Offset(0, 2)
r.Clear
End If
Next r
For Each r In J
If Left(r.Text, 6) = "Amount" Or Left(r.Text, 1) = "$" Or Left(r.Text, 1) = "(" Then
r.Copy r.Offset(0, 1)
r.Clear
End If
Next r
ActiveWorkbook.Save
End Sub
【问题讨论】:
-
ColJ 或偏移列中的任何单元格是否有公式?在运行前关闭 ScreenUpdating 并将 Calculation 设置为手动会给你一个提升。完成后不要忘记将计算设置回自动。
-
正如@TimWilliams 所说,始终将计算设置为手动,但不要在宏末尾盲目地将其设置为自动,而是将其重置为原始状态。用户可能有意将计算设置为手动。为此,请声明一个 xlCalculation 类型的变量来捕获原始状态,然后在最后使用此变量将其重置。
-
您有多种答案可供选择。我希望您会对不同的解决方案进行一些时间测试,标记对您来说最快的解决方案,并可能对每个解决方案发表评论,说明花费了多长时间。这将使这个问题成为一个很好的问题,可以作为其他提出非常相似问题的人的参考。我同意@TimWilliams 关于
ScreenUpdating和手动计算的观点——它们适用于所有答案。 -
非常感谢大家的付出正确答案
-
@mb1987 使用 Variant Array 方法(如 Jeeped 答案末尾所述)将为您带来数量级的改进