如何在vba上一种条件下自动删除完整的行?
我是VBA的初学者。为了从数据库中删除第9列单元格上具有“na”值的行,我使用了以下简单循环代码:如何在vba上一种条件下自动删除完整的行?,vba,excel,loops,Vba,Excel,Loops,我是VBA的初学者。为了从数据库中删除第9列单元格上具有“na”值的行,我使用了以下简单循环代码: Dim n As Integer n = 500 For i = 1 To n If Cells(i, 9).Value = "n.a." Then Rows("i:i").Select Selection.Delete Shift:=xlUp End If Next i End Sub 但是我得到了1004错误,有
Dim n As Integer
n = 500
For i = 1 To n
If Cells(i, 9).Value = "n.a." 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 = "n.a." Then
rows(i & ":" & i).Select
Selection.Delete Shift:=xlUp
End If
Next i
End Sub
无论何时删除行,都要从最大的行开始删除到最小的行。稍后,您可以通过谷歌搜索如何避免
选择
,以及如何使用联合
,一步完成删除操作。最后,您可以将Integer
替换为Long
您只需要这个
Dim n As Integer
n = 500
For i = n To 1 Step -1
If Cells(i, 9).Value = "n.a." Then Rows(i).Delete
Next i
编辑:
或者更准确地说,这使它成为动态的
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 = "n.a." Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
删除这些值的最快方法是使用自动筛选。不需要循环
Option Explicit
Public Sub AutoFilterDelete()
With Range("I1:I500")
.AutoFilter Field:=1, Criteria1:="n.a"
.Resize(WorksheetFunction.Match("*", .Cells, -1)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.Parent.AutoFilterMode = False
End With
End Sub
尽管我已经实现了您的修改,但仍然会出现相同的错误,错误文本是:“由应用程序或对象定义的错误”,您知道为什么会出现这种错误吗?谢谢你的帮助help@Mauro-再试一次,
行(i&“:”&i)。选择
也是错误的。我仍然得到相同的错误,我不明白为什么,因为代码似乎是正确的。现在我得到另一个错误:“需要一个对象”,这可能是因为我必须首先在我工作的工作表上采取行动吗?@Mauro-是的,如果你使用select,你也必须处理激活的工作表。最好避免,并参考此问题查看和。或因为如果工作表太大,它可能会变慢。因此,最好不要删除每一行并为该值创建一个非连续的范围或过滤器,以使其更快。您的代码运行正常,并获得了好评,这只是一条评论,以供将来的其他人参考。非常感谢