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

如上图,打算在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

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

追问

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

追答

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

温馨提示:内容为网友见解,仅供参考
无其他回答

利用宏实现自动筛选:包含固定单元格内容的筛选
回答:假设你在F列使用三个选项,可用变量a1\\a2\\a3来表示,然后使用工作表事件来判断是否在F列改写内容,来触发自动筛选,代码如下: 在当前工作表底部标签名上点鼠标右键,选“查看代码”,在弹出的代码窗口中粘贴下面代码: Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 6 Then ...

利用宏实现自动筛选:包含固定单元格内容的筛选
假设你在F列使用三个选项,可用变量a1\\a2\\a3来表示,然后使用工作表事件来判断是否在F列改写内容,来触发自动筛选,代码如下:在当前工作表底部标签名上点鼠标右键,选“查看代码”,在弹出的代码窗口中粘贴下面代码:Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 6 Then ...

Excel使用VBA宏查询包含指定内容的值
Sub main()x = Range("A65536").End(xlUp).Row ReDim arr(1 To x, 1 To 5)brr = Range("A1:E" & x)For i = 2 To UBound(brr)If Left(Cells(i, 5).Value, 4) = "2002" Then k = k + 1 For j = 1 To 5 arr(k, j) = brr(i, j)Next j End If Next i Rang...

EXCEL选定某一单元格的值后如何用宏设置自动筛选出同样的数据,任意单 ...
其实核心的代码就是中间 For...Next i 加上它前面那三行一共六行。开头与结尾那些是为了提高在大量数据(数千条以上时)处理时的效率。Sub 隐藏()Dim tmpStr As String, i As Long, j As Integer Dim Title As Integer, calcState, displayPageBreakState calcState = Application.Calculation dis...

excel怎么用宏确定固定筛选内容
ActiveSheet.Range("B:B").AutoFilter Field:=2, _ '2表示日期列在筛选区域第2列,改成你实际第几列 Criteria1:=Array("7:00-12:30", "7:00-15:00", "7:00-17:00", "8:00-15:00", "8:00-18:00", "9:00-18:00"), _ '如果还有更多时间段自行加入 Operator:=xlFilter...

excel如何筛选指定范围内的数据?
= SUMColor + 1 End If Next End Function 4、输入代码后,不用关闭宏,直接返回Excel界面,在一个单元格中输入公式=SUMColor(A1,$A$1:$B$6),A1就是要筛选的颜色的单元格,$A$1:$B$6是要筛选的区域,框选区域后,按F4键就可以了。5、输入公式后,就可以得到带颜色的单元格个数了。

excel筛选怎么用宏excel筛选怎么用
1、具体操作步骤如下:1.选中表格的第一行,在工具栏中选择“筛选”2.在需要筛选的那一列单元格中点击符号3.在弹出来的窗口中的“内容筛选”中填入筛选的条件。2、如在下列数字中想筛选出含有5的数字则在“内容筛选”空白处填写数字“5” 4.最后点击“确定”即可。

求助~在excel怎样用宏实现内容的自动筛选并复制!!
宏代码如下:Sub 筛选()For i = 1 To Sheets(1).[j65536].End(3).RowIf Sheets(1).Cells(i, 10) Like "*花都*" Then '注凡Sheet1J列含有“花都”二字的记录均被视为符合要求。a = Sheets(2).[j65536].End(3).Row + 1Sheets(1).Range(i & ":" & i).Copy Sheets(2)....

求:excel表中一列文字,我想从中自动筛选出带特定文字的单元格,应该如何...
1.执行“工具→宏→Visual Basic编辑器”菜单命令(或按“Alt+F11”快捷键),打开Visual Basic编辑窗口。2.在窗口中,执行“插入→模块”菜单命令,插入一个新的模块——模块1。3.在右边的“代码窗口”中输入以下代码:Function V(a,b,h)V = h*(a+b)\/2End Function 4.关闭窗口,自定义函数...

怎样编一个宏,根据某一单元格的值,作为筛选条件,对表格某列进行...
1)如果选择了40000这个单元格,但40000上面没有单元格了,筛选值的范围是多少呢?所有大于40000的?2)对表格的某列进行筛选,这个列跟你存储筛选条件的列之间是什么位置关系?最好给个同时包含筛选列和条件列的例子。

相似回答