如何在vba的一个条件下自动删除完整的行?

我是Vba的初学者。 我有以下简单的循环代码,以便从数据库中删除列9单元格上具有“na”值的行:

Dim n As Integer n = 500 For i = 1 To n If Cells(i, 9).Value = "na" Then Rows("i:i").Select Selection.Delete Shift:=xlUp End If Next i End Sub 

但是我得到了1004的错误,有谁能帮助我吗?

非常感谢你

 Option Explicit Public Sub TestMe() Dim n As Integer n = 500 For i = n To 1 Step -1 If Cells(i, 9).value = "na" Then rows(i & ":" & i).Select Selection.Delete Shift:=xlUp End If Next i End Sub 

每当你删除行,开始从最大到最小。 后来你可以谷歌如何避免Select和如何使用Union ,以便一步删除。 最后,你可以把Integerreplace成Long

你只需要这个…

 Dim n As Integer n = 500 For i = n To 1 Step -1 If Cells(i, 9).Value = "na" Then Rows(i).Delete Next i 

编辑:

或更正确地说,这使其dynamic…

 Application.ScreenUpdating = False Dim n As Long n = Cells(Rows.Count, 9).End(xlUp).Row For i = n To 1 Step -1 If Cells(i, 9).Value = "na" Then Rows(i).Delete Next i Application.ScreenUpdating = True 

删除这些值最快的方法是使用AutoFilters。 不需要循环。

 Option Explicit Public Sub AutoFilterDelete() With Range("I1:I500") .AutoFilter Field:=1, Criteria1:="na" .Resize(WorksheetFunction.Match("*", .Cells, -1)).SpecialCells(xlCellTypeVisible).EntireRow.Delete .Parent.AutoFilterMode = False End With End Sub