Excel 更改列中过滤值的过滤单元格背景色

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

如果我过滤第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 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:可能…:)