删除我想要的相反

我不知道我哪里错了。 如果这两个都是真的,我希望这个代码不做任何事情。 如果只有颜色是真的,我希望它删除行。 请告诉我什么是错的。

For lngRow = lngRows To 2 Step -1 If ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "E").DisplayFormat.Interior.ColorIndex = 38 _ And InStr(1, Range("N" & lngRow), LCase("po box") > 0) Then Else: ActiveWorkbook.Worksheets("Sheet1").Rows(lngRow).EntireRow.Delete End If Next 

我觉得我需要另一个If语句或什么? 我已经尝试了一堆不同的版本,但我无法得到它。 提前谢谢你的帮助。

我添加了这张照片。 如果这解释得更好。 我只需要使用PO Box着色的行。 但也没有着色的行,这将是他们大部分没有照片。 (这是全部假信息)

在这里输入图像说明

只删除已着色但不包含“po box”的行

 If ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "E").DisplayFormat.Interior.ColorIndex = 38 _ And InStr(1, LCase(Range("N" & lngRow)), "po box") = 0 Then ActiveWorkbook.Worksheets("Sheet1").Rows(lngRow).EntireRow.Delete End If 

注意:在string中search“po box”(已经全部小写)的LCase版本并不全是小写,也会给你带来麻烦。 您应该在单元格的LCase版本中检查“po box”。

在我看来,这可能是Instr的括号的位置。 也许它应该是InStr(1, Range("N" & lngRow), LCase("po box")) > 0 ? 另外我会build议使用If Not

 If Not (ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "E").DisplayFormat.Interior.ColorIndex = 38 & _ And InStr(1, Range("N" & lngRow), LCase("po box")) > 0) Then 'check your parenthesis here ActiveWorkbook.Worksheets("Sheet1").Rows(lngRow).EntireRow.Delete End If 

我相信一个两列.AutoFilter会更合适。

 Dim lngRows As Long lngRows = 6 With Worksheets("sheet4") If .AutoFilterMode Then .AutoFilterMode = False With .Range("E1:N" & lngRows) .AutoFilter Field:=1, Criteria1:=RGB(255, 153, 204), Operator:=xlFilterCellColor .AutoFilter Field:=10, Criteria1:="<>*po box*" With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0) If CBool(.Application.Subtotal(103, .Cells)) Then .SpecialCells(xlCellTypeVisible).EntireRow.Delete End If End With End With If .AutoFilterMode Then .AutoFilterMode = False End With