使下面的VBA代码更有效率

我试图删除包含任何指定值的行。 下面的代码在〜200k行的工作表中工作,但是当我尝试在350k行的表中运行时,excel崩溃。 任何想法如何使它更有效率? 非常感谢!

Sub MultiDelete() With Application .ScreenUpdating = False .DisplayAlerts = False End With Range("A1").Activate 'change to suit the column containing the names Dim MultiDelete MultiDelete = Array("Name1", "Name2", "Name3") 'put as many names as you like in the array Dim G As Variant While ActiveCell.Value <> "" G = Filter(MultiDelete, ActiveCell.Value) If UBound(G) <> -1 Then Selection.EntireRow.Delete Else ActiveCell.Offset(1, 0).Activate End If Wend With Application .ScreenUpdating = True .DisplayAlerts = True End With End Sub 

当前的代码几乎可以做到最无效率的事情:一次select和过滤350k行,看它们是否与数组中的项匹配。

相反,添加一个自动filter(或者将范围转换成一个Excel Table / ListObject,因为它内置了filter),然后启动macroslogging器,手动过滤三项,删除结果,清除filter,停止macroslogging器,然后去看它生成的代码。

macros观logging器应该是你的第一个停靠点,当你计划如何去做某件事的时候。 它并不总是生成优雅/高效的代码,你经常需要清理它,但在这种情况下,你将从冰河到蜿蜒的速度。