这比实际解决方案的任何需求都更为出乎学术兴趣 - 我最近编写了一些代码,可以处理大量文件中的一系列过滤器/排序/删除重复项,但由于我正在逐步完成代码,看起来这个循环似乎是主要瓶颈,我想了解为什么这么糟糕,以及为什么像过滤器和分类这样的内置函数似乎能够更快速地完成更困难的操作。在VBA中优化循环性能
For i = 2 To nRows
If (Cells(i, 1) <> Cells(i - 1, 1) Or Cells(i, 2) <> Cells(i - 1, 2)) _
And (Cells(i, 1) <> Cells(i + 1, 1) Or Cells(i, 2) <> Cells(i + 1, 2)) Then
Rows(i).EntireRow.Delete
i = i - 1
nRows = nRows - 1
End If
Next i
VBA中的表调用非常缓慢(与数组或类似)。每次循环时,您的IF语句都会打印8张表格。更快的解决方案是将所有数据读取到数组中 - 对数组执行所有处理过滤等操作,然后将数组输出到表单中。 – 99moorem
@ 99moorem谢谢,我试了一下,并得到了显着的加速。如果你要写评论作为答案,我会接受(否则我会像社区维基答案一样)。 – Nitin
https://stackoverflow.com/questions/30959315/excel-vba-performance-1-million-rows-delete-rows-containing-a-value-in-less – Slai