VBA – 代码执行速度非常慢

我有一个相当简单的代码,我正在使用循环的Excel数据表。 基本上,我有超过150,000行的数据,我想删除每一行,除了那些“仪器故障”,在这种情况下,我想这行和紧上面和下面的一个(可能包含有关的细节失败)。 这是我的代码:

Sub UnsignedFailure() Application.ScreenUpdating = False 'Start point Set r = Range("E1") 'Loop, total rows is a function, executes quickly For t = 3 To TotalRows 'Check for a failure k = InStr(1, r.Cells(t, 1).Value, "Instrument Failure") 'Verify that it corresponds to a GC b = InStr(1, r.Cells(t, 1).Offset(0, -3).Value, "GC") If k <> 0 And b <> 0 Then 'Skip two rows if it is true t = t + 2 Else 'Delete the previous row since this row is not a failure r.Cells(t - 1, 1).EntireRow.Delete 'Go back a row to account for the deleted row t = t - 1 End If Next t Application.ScreenUpdating = True End Sub 

我已经通过逐步检查,它的工作原理。 但是,即使每次“IF”都是正确的,中断之间的时间似乎很长(可能需要5分钟来检查20,000个单元格)。 如果我让代码运行没有中断,我还没有完成(计算机冻结)。 我在代码中丢失了什么或者效率低下? 任何帮助将不胜感激!

我对excelmacros的使用经验告诉我,将符合条件的数据复制到新工作表是非常有效的,而不是删除不匹配的行。

每次删除一行时,重新计算工作表需要几毫秒的时间(即使没有公式,它仍会检查每个单元格是否需要更新),并将显示更新为用户。 你已经禁用了屏幕更新,这肯定会减less这段时间。 另一种方法是closuresExcel Calculation,把Application.Calculation = xlCalculationManual放在你的sub的顶部,以禁用重新计算,并在底部使用Application.Calculation = xlCalculationAutomatic来重新启用它。 这个网站有一些关于优化Excel的VBA代码的好的指针。

正如我所说的,我认为最有效的方法是在符合条件时将数据移动到新表中。