vba - 根据 2 个不同列中的颜色和文本删除行

标签 vba excel

我正在尝试删除一行,如果它在 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

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

另请注意,即使没有匹配的行,这也会起作用。

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

关于vba - 根据 2 个不同列中的颜色和文本删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46201362/

相关文章:

vba - 将 VBA 嵌入到工作表中以根据单元格的值显示/隐藏表单控件

vba - 如何优化一组解析字符串和变体类型的 VBA 函数

vba - 无法在计划任务中使用 vba 关闭 Excel 应用程序

vba - 如何在 VBA 中引用和刷新 Excel 2016 中的查询表

excel - 根据用户窗体文本字段中的变量隐藏行

excel - 内存不足错误 - 尝试使用 Win API 检查 ErrorHandler 中的内存使用情况

excel - 使用带有数组公式的 if 语句命名范围以用于依赖下拉列表

arrays - 使用具有命名范围的数组加速 VBA

excel - 打开 Excel 工作簿时自动运行 VBA 代码

excel插件 |在 list 加载时在桌面 excel 上显示错误