利用宏实现自动筛选:包含固定单元格内容的筛选

如上图,打算在A 列筛选出F2:F4这三个单元格所包含的内容。要求在A列显示自动筛选后的内容,取消自动筛选后还可以恢复原样。如果只是筛选包含“a" "e" "f" 三个固定字母的我已经实现了,利用VBA宏
ActiveSheet.Range("$A$2:$A$1000").AutoFilter Field:=1, Criteria1:=Array( _
"a", "e", "f", "="), Operator:=xlFilterValues
可是我现在想要的是筛选的内容是可变的,也就是F2:F4这三个格子里的内容我可随时改动。希望能用宏实现,请高手支招。

假设你在F列使用三个选项,可用变量a1\a2\a3来表示,然后使用工作表事件来判断是否在F列改写内容,来触发自动筛选,代码如下:

在当前工作表底部标签名上点鼠标右键,选“查看代码”,在弹出的代码窗口中粘贴下面代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 Then
    a1 = [f2]: a2 = [f3]: a3 = [f4]
    ActiveSheet.Range("$A$2:$A$1000").AutoFilter Field:=1, Criteria1:=Array( _
        a1, a2, a3), Operator:=xlFilterValues
End If
End Sub

然后回到excel窗口,只要改变F列内容,就会自动进行筛选操作。

提示:如果相增加筛选内容,可增加第三行中的对应变量。

追问

我不需要实时的响应,只要有一个宏能实现这个功能,我做一个按钮连接这个宏,当我想筛选的时候按下按钮运行这个宏就行了。而且活动区域要筛选的内容也并不是固定的只有三个
最难的地方就是如何将自动筛选内容在代码里变成筛选区域,这知道这么描述清不清楚。

追答

那就重新做两段代码吧

第一段用于隐藏不符合F列要求的行

Sub 隐藏()
x = Range("a65536").End(xlUp).Row
y = Range("f65536").End(xlUp).Row
If x < 2 Or y < 2 Then Exit Sub
For i = 2 To x
    s = 0
    For j = 2 To y
        If Range("a" & i) = Range("f" & j) Then s = 1
    Next
    If s = 0 Then Rows(i).EntireRow.Hidden = True
Next
End Sub

第二段用于全部显示数据

Sub 显示()
Rows("1:65536").EntireRow.Hidden = False
End Sub

你在表中做两个按钮,指定这两个宏就行了。

追问

这属于是“伪筛选“喽:-)

追答

管它是什么呢,只要能解决问题就行啦。

温馨提示:答案为网友推荐,仅供参考