删除行速度不够快

我有超过60000行excel我需要通过阅读F列删除。 我有一个运行macros,但它是永远的。 如果列F的值为0或空值,我正在删除行。 我想我的代码可能太罗嗦了。 我在VBA很新。 我在网上find了这个代码,并试图让它成为我自己的代码。 任何帮助是极大的赞赏。 我的代码列在下面。

 Private Sub CommandButton1_Click() Dim rng As Range Dim i As Long Set rng = ThisWorkbook.ActiveSheet.Range("F1:F62000") With rng For i = .Rows.Count To 1 Step -1 If .Item(i) = "" Then .Item(i).EntireRow.Delete End If For i = .Rows.Count To 1 Step -1 If .Item(i) = "0" Then .Item(i).EntireRow.Delete End If Next i End With End Sub 

删除循环中的行是一个非常缓慢的过程。

这是一个更快的方法。 这确定了需要删除的范围,然后一次性删除它们。 你也有很多不必要的代码,我已经删除。 我没有testing下面的代码,但我认为它应该工作。

 Private Sub CommandButton1_Click() Dim rng As Range, delRng As Range Dim i As Long With ThisWorkbook.ActiveSheet For i = 1 To 62000 If .Range("F" & i).Value = "" Or .Range("F" & i).Value = "0" Then If delRng Is Nothing Then Set delRng = .Range("F" & i) Else Set delRng = Union(delRng, .Range("F" & i)) End If End If Next i End With If Not delRng Is Nothing Then delRng.Delete End Sub 

注意 :另一个更快的方法是使用.Autofilter

为了处理列F具有数字和文本的可能性,您可以Autofilter两个阶段使用自动Autofilter :一个删除空白,一个删除,其中0

  With ThisWorkbook.ActiveSheet.Range("F1:F62000") .AutoFilter 1, "" .Offset(1).EntireRow.Delete .AutoFilter .AutoFilter 1, 0 .Offset(1).EntireRow.Delete .AutoFilter End With 

从经验来看,这是按标准删除行的最快方法。 不过请注意,使用Autofilter需要将第一行作为标题行。 插入一个空白行,如果不是这样的话。

在代码和Application.ScreenUpdating = True之前尝试使用Application.ScreenUpdating = False

你有两个For i =在你的代码中。 一个在另一个里面…只使用一个:

 For i = .Rows.Count To 1 Step -1 If .Item(i) = "" Or .Item(i) = "0" Then .Item(i).EntireRow.Delete End If Next i