在Excel中如何快速筛选非特定颜色

Excel中的自动筛选是个非常强大的工具,不仅可以筛选内容,而且可以筛选颜色,例如筛选A列红色单元格。但是有时希望筛选除了红色之外的单元格(下图右侧所示),其他单元格的填充色不固定,有几种颜色也不固定,那么内置的自动筛选就无能为力,使用VBA还是可以实现的。

示例代码如下。

vb 复制代码
Sub Demo()
    Dim helpRng As Range, visRng As Range
    Dim lastRow As Long, oSht As Worksheet
    Set oSht = Sheets("Sheet1")
    If oSht.AutoFilterMode Then oSht.AutoFilterMode = False
    lastRow = oSht.Cells(oSht.Rows.Count, 1).End(xlUp).Row
    With oSht.Range("A1:E" & lastRow)
        .AutoFilter Field:=1, Criteria1:=RGB(255, 0, 0), Operator:=xlFilterCellColor
        Set helpRng = .Columns(.Columns.Count).Offset(, 1)
        helpRng.EntireColumn.Hidden = False
        On Error Resume Next
        Set visRng = helpRng.SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
        If Not visRng Is Nothing Then
            oSht.AutoFilterMode = False
            helpRng.Clear
            visRng.Value = 1
            helpRng.AutoFilter Field:=1, Criteria1:=""
            helpRng.EntireColumn.Hidden = True
        End If
    End With
End Sub

【代码解析】

第4行代码获取工作表对象。

第5行代码如何工作表已经启用自动筛选,请取消当前的自动筛选。

第6行代码获取A列最后数据所在行号。

第7行代码设置表格范围,如果已经创建Excel表格,那么可以直接使用ListObject对象。

第8行代码在第1列应用自动筛选,筛选颜色为红色。

第9行代码在表格右侧添加辅助列。

第10行代码确保辅助类处于显示状态(没有被隐藏),否则第12行无法获取相应的单元格。

第11行代码忽略运行时错误。

第12行代码获取辅助列的可见单元格。

第13行代码恢复系统错误处理机制。

第14行代码如果可见单元格不为空,说明具备红色单元格。

第14行代码取消自动筛选。

第16行代码清空辅助列。

第17行代码将可见单元格(即红色所在行)赋值为1。

第18行代码启用自动筛选,筛选辅助列为空的单元格(即:非红色所在行)。

第19行代码隐藏辅助列。


希望大家不用谈辅助列色变,认为使用辅助类的解决方案,都是很弱智的实现方法,实际上合理使用辅助列,可以更好的利用Excel内置功能,在数据量比较大的应用场景中,这通常比单纯的VBA实现方案更高效,总之,效率为王,英雄不问出身。

相关推荐
bin91532 个月前
【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。
大数据·信息可视化·数据挖掘·数据分析·excel·数据可视化·数据筛选
Alex_StarSky10 个月前
数据分析-Pandas如何轻松处理时间序列数据
数据挖掘·数据分析·pandas·时间序列·dataframe·数据过滤·数据筛选
躺柒1 年前
读算法霸权笔记07_筛选
算法·算法霸权·筛选·人格测试·颅相学