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