【问题标题】:Change filtered cell background color for that filtered values in a column更改列中过滤值的过滤单元格背景颜色
【发布时间】:2020-09-01 14:55:23
【问题描述】:

如果我过滤第 2 列中的数据,我想更改过滤后的行/s 背景颜色。可能吗? 我的意图是,如果列上有任何过滤器,那么我想以不同的方式显示。

请看下面我想要达到的结果的图片:

Choosing values to Filter in Column 2

On change Color on Filtered Rows(Yellow)

Rows will go back to Original state when there is no filter

【问题讨论】:

  • 我相信这就是你要找的东西:stackoverflow.com/a/62054627/4101210
  • 我是宏的新手。 &我尝试从您提供的链接复制代码并将其粘贴到我的工作表中,但它不起作用:(@Mech

标签: excel vba


【解决方案1】:

请尝试下一个代码:

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 是清除未过滤范围上的颜色所必需的。否则,在使用不同标准进行一些测试后,所有范围单元格都会被着色...

【讨论】:

  • 我需要在按钮中指定这个吗?
  • @Yumi Hamano:您可以将它分配给一个按钮,或者简单地从 VBE(Visual Basic for Application Editor)按 F5 运行它(以便对其进行测试)。它可以从一个事件、许多控件以多种方式运行...
  • 过滤列后可以立即运行吗?
  • 可能在睡觉:)
  • @Mech: 也许... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2019-12-23
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多