基于2个不同列中的颜色和文本删除行

我试图删除一行,如果它有一个红色的C列,如果它没有在字段N中的单词PO框。我已经得到它在哪里它删除N行po盒,但我似乎无法得到它去其他的方式,并保持行与宝箱。 这是我的代码。 13551615是红色的背景颜色。

另外,如果有更快的方法来做到这一点,那也会很好。 这需要大约13秒来运行我的3k行。 我只有20行的颜色,我已经把它们排在最前面。 但是我真的只是想要这个工作,即使它需要一秒钟。

Dim lngRow As Long Dim lngRows As Long 'Find the last row in Column A lngRows = Range("A" & Rows.Count).End(xlUp).Row For lngRow = lngRows To 2 Step -1 If ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "C").FormatConditions(1).Interior.Color = 13551615 Then If Not InStr(1, LCase(Range("N" & lngRow)), LCase("PO Box")) <> 0 Then ActiveWorkbook.Worksheets("Sheet1").Rows(lngRow).EntireRow.Delete End If End If Next 

最快的方法是不要使用循环。 而是使用AutoFilter

  Dim lngRow As Long Dim lngRows As Long 'Find the last row in Column A lngRows = Range("A" & Rows.Count).End(xlUp).Row With Range(Worksheets("Sheet1").Rows(1), Worksheets("Sheet1").Rows(lngRows)) .AutoFilter Field:=Columns("C").Column, Criteria1:=13551615, Operator:=xlFilterCellColor .AutoFilter Field:=Columns("N").Column, Criteria1:="<>*PO Box*", Operator:=xlAnd .Offset(1).SpecialCells(xlCellTypeVisible).Delete .AutoFilter ' Turns off autofilter and shows all rows End With 

请注意,您不需要将彩色行sorting到顶部。

另外请注意,即使没有匹配的行,这也可以工作。

警告:
请注意,这将始终删除数据结束的第一行。 (如果需要,这可以相对容易地修复。)

不需要双重循环。 用下面陈述的语句设置两个条件。 这也应该更快,因为它只做一个循环。

 Dim lngRow As Long Dim lngRows As Long 'Find the last row in Column A lngRows = Range("A" & Rows.Count).End(xlUp).Row For lngRow = lngRows To 2 Step -1 If Not InStr(1, LCase(Range("N" & lngRow)), LCase("PO Box")) <> 0 And Range("C" & lngRow).Interior.Color = 13551615 Then Worksheets("Sheet1").Rows(lngRow).EntireRow.Delete End If Next