Код 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

Насколько я понимаю ваш вопрос, вы не хотите использовать раскрывающийся список Autofilter для фильтрации данных. Вместо этого вы хотите ввести список элементов в InputBox, а затем отфильтровать данные по этим элементам.

Это можно сделать с помощью этого кода:

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. Ваши данные находятся на Листе 1. Если нет, измените последнюю строку в процедуре.
  3. Вы хотите использовать пробел для разделения элементов списка. Если нет, измените строку, которая говорит, sep = " "на что-то другое.

Связанный контент