Excel 更改列中过滤值的过滤单元格背景色
如果我过滤第2列中的数据,我想更改过滤行的背景色。可能吗? 我的意图是,如果列上有任何过滤器,那么我想以不同的方式显示它 请看下面我想要实现的结果的图片:Excel 更改列中过滤值的过滤单元格背景色,excel,vba,Excel,Vba,如果我过滤第2列中的数据,我想更改过滤行的背景色。可能吗? 我的意图是,如果列上有任何过滤器,那么我想以不同的方式显示它 请看下面我想要实现的结果的图片: 请尝试下一个代码: Sub TESTColorFilteredRange() Dim sh As Worksheet, lastR As Long, rng As Range, rngF As Range Dim filtCol As Long 'column to be filtered Dim filte
请尝试下一个代码:
Sub TESTColorFilteredRange()
Dim sh As Worksheet, lastR As Long, rng As Range, rngF As Range
Dim filtCol As Long 'column to be filtered
Dim filterCriteria As String 'set here your filter criteria
filtCol = 1 'column A:A. Change here according to your need
filterCriteria = "A" 'Set it your criteria. I ued "A" for testing reason...
Set sh = ActiveSheet
sh.cells.AutoFilter 'clear te filter if it exists
lastR = sh.cells(Rows.count, filtCol).End(xlUp).Row 'last row on the column to be filtered
Set rng = sh.Range(sh.cells(1, filtCol), sh.cells(lastR, filtCol)) 'set the range to be filtered
rng.AutoFilter field:=1, Criteria1:="=" & filterCriteria 'filter the range
Set rngF = rng.SpecialCells(xlCellTypeVisible) 'set the filtered cells range
rngF.Interior.Color = vbYellow 'color the filtered range interior
NotIntersect(rng, rngF).Interior.Color = xlNone 'uncolor the not filtered range interior
End Sub
Function NotIntersect(rng As Range, rngF As Range) As Range 'determines the not filtered range
Dim rngNI As Range, i As Long
For i = 1 To rng.Rows.count
If rng.cells(i, 1).EntireRow.Hidden Then
If rngNI Is Nothing Then
Set rngNI = rng.cells(i, 1)
Else
Set rngNI = Union(rngNI, rng.cells(i, 1))
End If
End If
Next i
If Not rngNI Is Nothing Then Set NotIntersect = rngNI
End Function
请测试并发送一些反馈
NotIntersect
是清除未过滤区域的颜色所必需的。否则,在使用不同标准进行一些测试后,所有范围单元格都将上色。我相信这就是您要寻找的:我对宏是新手我尝试从您提供的链接复制代码并将其粘贴到我的工作表中,但无效:(@MechDo我需要在按钮中指定此项吗?@Yumi Hamano:您可以将其指定给按钮,或从VBE(Visual Basic for Application Editor)中简单运行它,按F5(以便测试它)。它可以从一个事件、从许多控件以多种方式运行…它可以在筛选列后立即运行吗?可能正在休眠:)@Mech:可能…:)