excel - 对于每个新循环,for 循环都会变慢
问题描述
我构建了一个加载项,将描述与不同文档中的单词列表库相匹配。
我的循环一遍又一遍地做同样的事情,但是一个循环只需要一秒钟多一点的时间来完成,其中 10 次迭代大约需要 3 秒,20 次循环平均需要 4 秒,但 200 次需要几个小时才能完成。
代码片段:
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
解决方案
推荐阅读
- ruby-on-rails - 如何为集合字段设置占位符文本
- .net - NLog 在使用 String.Format 样式时会乱序替换参数
- python - 如何解压缩从函数 common() 返回的两个列表(list1 和 list2)?
- azure-functions - Azure 函数:返回 JSON 对象
- python - 在类方法上使用 eval() 函数
- python-3.x - 如何将 NLTK 语料库添加到谷歌云功能?
- vue.js - 从 vue 指令中访问 getter
- powershell - 如何在控制台外显示 Get-Help 信息
- python - 强制气流以退出代码 1 终止
- android - 如何仅根据最低位置精度更新位置