基于过滤器的列格式(Microsoft Excel)
在大型数据表中,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。