我们有一张包含大量列的工作表,通常使用筛选来导航到正确的数据。问题是,有时应用筛选并不明显,视觉提示非常微妙。是否可以通过公式或 VBA 显示有关另一个单元格内筛选的一些数据?
像这样:
仅知道过滤器是否处于活动状态就很有帮助,知道哪些列已应用活动过滤器将是锦上添花。理想情况下,它们会自动更新。
我没有电子表格的所有权,因此无法对其结构或任何内容进行重大更改,但 VBA 可以。
有任何想法吗?
答案1
我相信这只有使用 VBA 才有可能。
我还假设您不需要检查自动过滤器是否应用在正确的范围内(请参阅进一步阅读),并且您不必检查AUTOFILTER 是否处于活动状态(即没有箭头,没有自动过滤器)。
这是一个用户定义的函数,用于检查工作表中是否有任何活动过滤器,如果有,则显示哪些列已被过滤。我相信还有更好的函数;您可能需要修改它以满足您的需求。
Function CheckFilters(r As Range) As String
Set AWS = r.Worksheet ' Refer the r RANGE, find which Worksheet it is on
fstate = ""
If AWS.FilterMode Then
c = AWS.AutoFilter.Filters.Count
'go through each column and check for filters
For i = 1 To c Step 1
If AWS.AutoFilter.Filters(i).On Then
fstate = fstate & r(i).Value & ", "
End If
Next i
'removes the last comma
fstate = Left(fstate, Len(fstate) - 2)
Else
fstate = "NO ACTIVE FILTERS"
End If
CheckFilters = fstate
End Function
要使用它,请将 ff. 公式输入到空单元格中:
=CheckFilters(A3:E3)&LEFT(SUBTOTAL(9,A3:A48),0)
其中A3:E3
包含数据的列标签(见下面的示例)
公式的这一&LEFT(SUBTOTAL(9,A3:A48),0)
部分除了强制单元格在您更改过滤器时“自动”重新评估外,没有任何明显的用途。(归功于肖恩·切希尔建议)。请注意,这比描述的解决方案更好这里因为它仅当您在参数中定义的范围发生变化时才会重新计算。
例子
使用过滤器:
自动筛选已启用,但未筛选任何列:
与条件格式一起使用: