Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vba上一种条件下自动删除完整的行?_Vba_Excel_Loops - Fatal编程技术网

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

如何在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错误,有

我是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错误,有人能帮我吗

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,你也必须处理激活的工作表。最好避免,并参考此问题查看和。或因为如果工作表太大,它可能会变慢。因此,最好不要删除每一行并为该值创建一个非连续的范围或过滤器,以使其更快。您的代码运行正常,并获得了好评,这只是一条评论,以供将来的其他人参考。非常感谢