Excel VBA – search+replace而不是每个循环?
我正在循环查找具有〜5000行的列,以查找特定的唯一logging。 一旦find,我抵消并用一个范围内的值replace它。 这自然是相当资源密集的,我发现它偶尔会冻结运行macros的旧机器。
我的想法是现在用Search&Replacemacros替代它,但是我想知道是否性能实际上更快,因为检查每个单元格在值的范围内的过程仍然是相同的?
这里的代码我到目前为止。 search和replace如何看起来是值得的?
Sub Replace_List() Dim rList As Range, cel As Range, n As Long Dim fnd As Range Dim fndFirst As String Application.ScreenUpdating = False With ThisWorkbook.Sheets("Settings") Set rList = .Range("D4", .Range("D" & .Rows.Count).End(xlUp)) End With For Each cel In rList Set fnd = ThisWorkbook.Worksheets("Data").Columns("A:A").Find(What:=cel.Value, LookAt:=xlWhole) If Not fnd Is Nothing Then fndFirst = fnd.Address Do fnd.Offset(0, 1).Value = cel.Offset(0, 2).Value Set fnd = ThisWorkbook.Worksheets("Data").Columns("A:A").FindNext(After:=fnd) Loop While fnd.Address <> fndFirst End If Next Application.ScreenUpdating = True MsgBox "Replaced all items from the list.", vbInformation, "Replacements Complete" End Sub
注意:这不是一个答案,而是一些思考,并且占用太多的空间来发表评论。
这几乎是我在“search和replace”中使用的格式。 我不确定这是否会变得更快,但正如你所看到的,这与你的“发现”声明并没有太大的区别。 对我来说,它工作正常,但我没有看成千上万的logging。 希望这可以帮助你做出决定。
ThisWorkbook.Worksheets("Data").Columns("A:A").Replace What:=myValue1, Replacement:=myValue2, LookAt:=xlWhole, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False