使用单个输入框在单个列中输入多个过滤器的 VBA 代码

使用单个输入框在单个列中输入多个过滤器的 VBA 代码

我需要使用宏过滤我的 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

假设:

  1. 您的数据在包含单元格 A1 的范围内。如果不是,请更改程序中的最后一行。
  2. 您的数据在 Sheet1 上。如果不是,请更改程序中的最后一行。
  3. 您想使用空格来分隔列表项。如果不行,请将内容更改sep = " "为其他内容。

相关内容