Excel 对于循环,每个新循环都会变慢
我构建了一个外接程序,将描述与不同文档中的单词列表库相匹配 我的循环一次又一次地做同样的事情,但是一个循环只需要一秒钟就可以完成,其中10个循环每次迭代大约需要3秒,20个循环平均需要4秒,但完成一个循环需要200个小时 代码片段:Excel 对于循环,每个新循环都会变慢,excel,vba,Excel,Vba,我构建了一个外接程序,将描述与不同文档中的单词列表库相匹配 我的循环一次又一次地做同样的事情,但是一个循环只需要一秒钟就可以完成,其中10个循环每次迭代大约需要3秒,20个循环平均需要4秒,但完成一个循环需要200个小时 代码片段: For Each rRow In CoAsh.Range(matchRange.Address).Rows pctDone = i / rowCount With frmProgress .LabelCaption.Caption
For Each rRow In CoAsh.Range(matchRange.Address).Rows
pctDone = i / rowCount
With frmProgress
.LabelCaption.Caption = "Processing account " & i & " of " & rowCount
.LabelProgress.Width = pctDone * (.FrameProgress.Width)
.LabelPercent = Round(pctDone * 100, 0) & "%"
End With
DoEvents
accArray = sh.Range("A2:A" & lRow).Value
For b = LBound(accArray) To UBound(accArray)
accString = accArray(b, 1)
sh.Cells(b + 1, 3).Value = levenshtein(CoAsh.Cells(rRow.Row, AccCol), accString, True)
Next b
sh.Select
sh.AutoFilter.Sort.SortFields.Clear
sh.AutoFilter.Sort.SortFields.Add Key:=Range("C1:C" & lRow), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
With sh.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
sh.Range("B2:B6").Copy
sh.Range("I2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
sh.Range("$I$2:$I$6").RemoveDuplicates Columns:=1, Header:=xlNo
sh.Range("I2:I6").Copy
CoAsh.Select
CoAsh.Cells(rRow.Row, 8).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
i = i + 1
Next rRow
1.避免使用
。选择,阅读。2.如果您真的不需要它,请尝试从循环内部删除Do Events
,它会暂停宏以执行一些excel操作(是的,这是对“Do Events”的非常一般的描述)。3.在循环之前使用Application.screenUpdate=False
方法,在循环之后使用Application.screenUpdate=True
方法(在代码的这一部分中没有看到)。谢谢。我会尝试实施你的一些建议,看看有什么不同。感谢您的快速反馈。尽量避免在excel单元格中使用迭代。。我已经测试过了,循环字典是最快的。。(也比数组快)因为这是工作代码,所以你应该在代码审查堆栈上发布。谢谢大家的建议。我首先将两个源写入一个数组,然后只循环数组。这是唯一一件最终改善了整体时间的事情。