Excel VBA删除for循环中的行时错过了行

Ene*_*er1 7 excel vba excel-vba

我有一个子程序,删除包含大约1000行的范围内的行.在critera上删除行.以下代码有效.

但是,当我运行宏时,我通常必须运行它4次才能删除包含删除条件的所有行.

我想这是因为当一行在删除行时突然消失时,for循环错过了它的索引.

我的第一个代码看起来像这样.

    Set StatusRange = Range("B2", Range("B2").End(xlDown))

        For Each StatusCell In StatusRange
                    If StatusCell = "FG" Then
                        StatusCell.EntireRow.Delete
                    ElseIf StatusCell = "QC" Then
                        StatusCell.EntireRow.Delete
                    ElseIf StatusCell = "CS" Then
                        StatusCell.EntireRow.Delete
                    Else
                End If
     Next StatusCell
Run Code Online (Sandbox Code Playgroud)

当我尝试更新每个循环的范围时,它仍然无法正常工作.

Set StatusRange = Range("B2", Range("B2").End(xlDown))
     For Each StatusCell In StatusRange
            If StatusCell = "FG" Then
                StatusCell.EntireRow.Delete
            ElseIf StatusCell = "QC" Then
                StatusCell.EntireRow.Delete
            ElseIf StatusCell = "CS" Then
                StatusCell.EntireRow.Delete
            Else
        End If

        Set StatusRange = Range("B2", Range("B2").End(xlDown))
        Next StatusCell
Run Code Online (Sandbox Code Playgroud)

有没有人知道这个问题?谢谢.

小智 11

从下往上工作.如果删除一行,一切都会向上移动,并在下一次迭代时跳过该行.

以下是从底部开始处理的代码的"内脏".

With Worksheets("Sheet1")
    For rw = .Cells(.Rows.Count, "B").End(xlUp).Row To 2 Step -1
        Select Case UCase(.Cells(rw, "B").Value2)
            Case "FG", "QC", "CS"
                .Rows(rw).EntireRow.Delete
        End Select
    Next rw
End With
Run Code Online (Sandbox Code Playgroud)