在大型数据表中,Ed希望能够快速扫描并查看是否正在主动过滤特定的列。他想知道当正在播放基于该列的过滤器时,是否有任何方法可以应用条件格式来更改该列的背景颜色。

您可以通过几种方法来完成此任务。它们全部都包含宏,每个宏的目的是确定某个特定列是否正在使用过滤器。一种选择是创建一个功能,该功能检查工作表中的过滤器,如果找到了合适的功能,则检查过滤区域中的每一列,以查看该列中是否有正在运行的过滤器。下面的宏就是这样做的。

Sub ColorFilterColumn()

Dim flt As Filter     Dim iCol As Integer     Dim lRow As Long     Dim rTemp As Range     Dim bFullCol As Boolean

' Set as True if you want entire column shaded     bFullCol = False

If ActiveSheet.AutoFilterMode Then         iCol = ActiveSheet.AutoFilter.Range.Column         lRow = ActiveSheet.AutoFilter.Range.Row         Application.EnableEvents = False         For Each flt In ActiveSheet.AutoFilter.Filters             If bFullCol Then                 Set rTemp = Cells(lRow, iCol).EntireColumn             Else                 Set rTemp = Cells(lRow, iCol)

End If

If flt.On Then                 rTemp.Interior.Color = vbYellow             Else                 rTemp.Interior.ColorIndex = xlColorIndexNone             End If

Set rTemp = Nothing             iCol = iCol + 1         Next flt         Application.EnableEvents = True     End If End Sub

如果宏找到了一个正在使用的过滤器,则它要么以黄色突出显示过滤表中的第一个单元格,要么突出显示具有该过滤器的整个列。确定是否突出显示单元格或整个列是基于分配给bFullCol变量的True / False值。

如果愿意,可以创建一个根据特定列是否有效的过滤器返回True或False的函数。使用这种功能,您可以创建条件格式设置规则,该条件设置格式可根据返回的值来格式化列。

Function bHasFilter(rcell As Range) As Boolean     Dim lBaseCol As Long     Dim lCol As Long

Application.Volatile     bHasFilter = False

If ActiveSheet.AutoFilterMode Then         With ActiveSheet.AutoFilter             lBaseCol = .Range.Column             lCol = rcell.Column - lBaseCol + 1             If lCol > 0 And lCol <= .Filters.Count Then                 If .Filters(lCol).On Then bHasFilter = True             End If         End With     End If End Function

要使用此功能,只需在工作表或条件格式规则中使用以下公式:

=bHasFilter(F23)

该函数首先检查是否有有效的过滤器。如果是这样,则它将计算传递给公式的单元格的列是否在已过滤列的范围内。 (在公式中引用的行并不重要。)如果是这样,那么它将检查该列的过滤器是否打开。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13410)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。