【发布时间】:2016-05-17 09:00:34
【问题描述】:
我有两列用于比较相同的条目,并通过 Offset 将匹配项推送到另一列。当我运行我构建的宏(使用一些 Microsoft 罐头代码)时,它基本上会冻结和崩溃,因为它是基于所使用的单元格的每个循环的嵌套,我认为它会在到达一个空单元格时结束,但是我担心我可能会陷入无限循环。任何帮助都感激不尽。
Dim myRng As Range
Dim lastCell As Long
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows.Count
Dim c As Range
Dim d As Range
For Each c In Worksheets("Sheet1").Range("AT2:AT" & lastRow).Cells
For Each d In Worksheets("Sheet1").Range("AU2:AU" & lastRow).Cells
If c = d Then c.Offset(0, 1) = c
Next d
Next c
【问题讨论】:
-
多少行?换句话说,什么是lastrow?它可能不是无限循环,但可能需要几分钟,具体取决于行数。因为你的迭代是 (lastrow -1)^2.
-
您的偏移量是正确的。它向右移动 1。
-
100,000 行是 1,000,000,000 次迭代,需要几分钟才能完成。你可能需要让它运行。虽然执行一个循环并使用 Range.Find 而不是第二个循环可能会更快。
-
搜索“Worksheet bloat” - 如果您受到此影响,那么您使用的范围将比您想象的要大得多。我总是使用通配符搜索来查找真正的最后一行,而不是使用使用的范围。
-
我会推荐 @ScottCraner 使用 range.find 的方法。你可以了解更多here。