【发布时间】:2017-10-25 20:40:37
【问题描述】:
Sub listClean()
For Each cellA In Range("A:A")
If cellA.Value <> "" Then
For Each cellB In Range("B:B")
If cellB.Value <> "" Then
If StrComp(cellA.Value, cellB.Value) = 0 Then
cellA.Value = ""
End If
End If
Next
End If
Next
MsgBox "Macro Finished"
End Sub
代码基本上从范围 A:A 中删除范围 B:B 中的任何内容。 我能做些什么来加快这个宏的速度吗?我在想 VBA 可以有办法将范围变成数组,然后清理数组。
【问题讨论】:
-
在 A 列中找到最后一行,这样您就不会循环 1+ 百万次。然后使用 find 或 Application.Match 检查 B 列中是否保存另一个循环。目前您正在循环 104 万 ^ 2 次。您需要将循环限制到最低限度。
-
@ScottCraner 实际上,它只进行了大约 (100 万 * A 列中 非空白 的数量) + (A 列中的空白数量) 过程,所以很可能比 1,000,000,000,000 小得多 - 但仍然太多。