Excel 删除具有不同条件的行时删除标题

Excel 删除具有不同条件的行时删除标题,excel,vba,Excel,Vba,在删除具有特定条件的行时,我遇到了一个问题,因为它也会删除我的标题,还有?有没有办法改进对具有不同条件的行的删除 Sub RO_FilterDelete() Dim RowToTest As Long For RowToTest = Cells(Rows.Count, 2).End(xlUp).row To 2 Step -1 With Cells(RowToTest, 1) If .Value <> "ONLINE" _ Then _ Rows(RowT

在删除具有特定条件的行时,我遇到了一个问题,因为它也会删除我的标题,还有?有没有办法改进对具有不同条件的行的删除

Sub RO_FilterDelete()
Dim RowToTest As Long

For RowToTest = Cells(Rows.Count, 2).End(xlUp).row To 2 Step -1

With Cells(RowToTest, 1)
    If .Value <> "ONLINE" _
    Then _
    Rows(RowToTest).EntireRow.Delete
End With

Next RowToTest

Dim RowToTest2 As Long

For RowToTest2 = Cells(Rows.Count, 2).End(xlUp).row To 2 Step -1

With Cells(RowToTest2, 6)
    If .Value <> "CONFIRMACIÓN DE INFORMACIÓN DE CONTRATO" _
    And .Value <> "ACTUALIZACIÓN DE INFORMACIÓN DE CONTRATO" _
    Then _
    Rows(RowToTest2).EntireRow.Delete
End With

Next RowToTest2
End Sub

你的代码的两个循环对我都有效。 正如Variatus所建议的,您的标题可能不在第一行


祝你今天愉快

使用union方法方便快捷

Sub test()
    Dim rngU As Range, Rng As Range
    Dim rngDB As Range

    Set rngDB = Range("a2", Range("a" & Rows.Count).End(xlUp))

    For Each Rng In rngDB
        If Rng <> "ONLINE" Then
            If rngU Is Nothing Then
                Set rngU = Rng
            Else
                Set rngU = Union(Rng, rngU)
            End If
        End If
    Next Rng

    If Not rngU Is Nothing Then
        rngU.EntireRow.Delete
    End If

    Set rngU = Nothing
    Set rngDB = Range("b2", Range("b" & Rows.Count).End(xlUp))

    For Each Rng In rngDB
        If Not (Rng.Value = "CONFIRMACION DE INFORMACION DE CONTRATO" Or Rng.Value = "ACTUALIZACION DE INFORMACION DE CONTRATO") Then
            If rngU Is Nothing Then
                Set rngU = Rng
            Else
                Set rngU = Union(Rng, rngU)
            End If
        End If
    Next Rng

    If Not rngU Is Nothing Then
        rngU.EntireRow.Delete
    End If

End Sub
子测试()
变暗rngU作为范围,Rng作为范围
Dim rngDB As范围
设置rngDB=范围(“a2”,范围(“a”和行数)。结束(xlUp))
对于rngDB中的每个Rng
如果Rng“在线”,则
如果rngU什么都不是
设置rngU=Rng
其他的
设置rngU=联合(Rng,rngU)
如果结束
如果结束
下一个Rng
如果不是,那就什么都不是了
rngU.EntireRow.Delete
如果结束
设置rngU=无
设置rngDB=范围(“b2”,范围(“b”和行数)。结束(xlUp))
对于rngDB中的每个Rng
如果不是(Rng.Value=“合同信息确认”或Rng.Value=“合同信息实施”),则
如果rngU什么都不是
设置rngU=Rng
其他的
设置rngU=联合(Rng,rngU)
如果结束
如果结束
下一个Rng
如果不是,那就什么都不是了
rngU.EntireRow.Delete
如果结束
端接头

使用union方法。按Union搜索您的标题在哪一行?顺便说一句,您不需要
RowToTest2
。您可以在第二个循环中重用现有的
RowToTest
,因为它的值不需要为任何其他目的而保留。当然,您可以通过构建更复杂的And/OR测试来组合这两个循环。使用Autofilter删除,如图所示,无需循环。谢谢您的评论,我现在要检查一下,标题在第一行,所以我不知道为什么要删除它,我将尝试下面的代码。我认为错误来自我将单元格粘贴到工作簿中时,不确定,我将检查它。
Sub test()
    Dim rngU As Range, Rng As Range
    Dim rngDB As Range

    Set rngDB = Range("a2", Range("a" & Rows.Count).End(xlUp))

    For Each Rng In rngDB
        If Rng <> "ONLINE" Then
            If rngU Is Nothing Then
                Set rngU = Rng
            Else
                Set rngU = Union(Rng, rngU)
            End If
        End If
    Next Rng

    If Not rngU Is Nothing Then
        rngU.EntireRow.Delete
    End If

    Set rngU = Nothing
    Set rngDB = Range("b2", Range("b" & Rows.Count).End(xlUp))

    For Each Rng In rngDB
        If Not (Rng.Value = "CONFIRMACION DE INFORMACION DE CONTRATO" Or Rng.Value = "ACTUALIZACION DE INFORMACION DE CONTRATO") Then
            If rngU Is Nothing Then
                Set rngU = Rng
            Else
                Set rngU = Union(Rng, rngU)
            End If
        End If
    Next Rng

    If Not rngU Is Nothing Then
        rngU.EntireRow.Delete
    End If

End Sub