如何在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
,以便一步删除。 最后,你可以把Integer
replace成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