![使用单个输入框在单个列中输入多个过滤器的 VBA 代码](https://linux22.com/image/1628744/%E4%BD%BF%E7%94%A8%E5%8D%95%E4%B8%AA%E8%BE%93%E5%85%A5%E6%A1%86%E5%9C%A8%E5%8D%95%E4%B8%AA%E5%88%97%E4%B8%AD%E8%BE%93%E5%85%A5%E5%A4%9A%E4%B8%AA%E8%BF%87%E6%BB%A4%E5%99%A8%E7%9A%84%20VBA%20%E4%BB%A3%E7%A0%81.png)
我需要使用宏过滤我的 Excel(多个数据)
我喜欢用 A、B 和 C 来过滤“等级列”(如图所示)(但这些 A、B 和 C 不受限制,有时我只需要“B 和 C”等级数据)并且我喜欢使用输入框输入这些等级进行过滤。
有人能帮我解决代码吗
如果输入可以给出“A + B + C”或“AB C”,将会非常有帮助
以下是示例数据,以空格分隔:
Name class Grade Liam 1 A Noah 2 b William 3 c James 1 d Olive 2 e Benjamin 3 f Elijah 1 A Lucas 2 b Mason 3 c Logan 1 d Alexander 2 e Ethan 3 f Jacob 1 A Michael 2 b Daniel 3 c Henry 1 d Jackson 2 e Sebastian 3 f Aiden 1 A Emma 2 b Olivia 3 c Ava 1 d Isabella 2 e
答案1
据我理解,您不想使用“自动筛选”下拉菜单来筛选数据。相反,您想在输入框中输入项目列表,然后筛选这些项目上的数据。
你可以用以下代码来实现:
Sub FilterListUsingInputBox()
Dim sep As String
Dim filter As String
Dim filters() As String
sep = " "
filter = InputBox("Enter a list of 1-n filter items, separated by a space")
If filter = "" Then 'no filter was entered
Exit Sub
End If
filters = Split(filter, sep)
Sheet1.Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:=filters, Operator:=xlFilterValues
End Sub
这里要注意的是,您必须先将输入拆分为一个数组,Split()
然后将其传递给Range.AutoFilter
方法,同时指定Operator:=xlFilterValues
。
假设:
- 您的数据在包含单元格 A1 的范围内。如果不是,请更改程序中的最后一行。
- 您的数据在 Sheet1 上。如果不是,请更改程序中的最后一行。
- 您想使用空格来分隔列表项。如果不行,请将内容更改
sep = " "
为其他内容。