我正在尝试删除C列中的红色,并且如果它没有单词po box中的单词。我已经将其删除的位置确实有N中有PO Box的行,但我似乎无法将其转向另一种方式,并用PO Box保持行。这是我的代码。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
请注意,您不需要将彩色行分类到顶部。
还要注意,即使没有匹配行也可以工作。
警告:
请注意,这将始终删除数据结束后的第一行。(如果需要,此可以相对容易固定。)
不需要双循环。在一个条件中设置两个条件,如下所述。这也应该更快,因为它仅执行一个循环。
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