Member 14588327 Ответов: 1

Диапазон фильтров на основе другого диапазона


Я хочу отфильтровать диапазон на основе другого диапазона, я хочу дать входной диапазон ,диапазон критериев и поле через поле ввода ,когда я попробовал следующий код, фильтр с "невыбранным всем" идет


Спасибо за ответ..

Что я уже пробовал:

Sub Multiple_Filter()
Dim Avalue As String
Dim a As Range
Dim crange As Range
Dim mainrng As Range
On Error GoTo 12
Set mainrng = Application.InputBox("Select the range ", "Advanced_Filter", Selection.Address, Type:=8)
Set crange = Application.InputBox("Select  Criteria Range ", "Advanced_Filter", Selection.Address, Type:=8)
Set filter_column = Application.InputBox("Select the first cell in the column where the Filter is to be applied", "Advcancesd_Filter", Type:=8)
first_colomn_number = mainrng.Column
filter_coloumn_index = filter_column.Column
d = filter_coloumn_index - first_colomn_number + 1 'to get the index for field
For Each cell In crange
Avalue = """" & cell & ""","
Next cell



len_avalue = Len(Avalue)
Avalue = Mid(Avalue, 1, len_avalue - 1) ' to remove the last "," from Avalue
 mainrng.AutoFilter Field:=d, Criteria1:=Array(Avalue), Operator:= _
        xlFilterValues


End Sub

Maciej Los

Почему InputBox?

1 Ответов

Рейтинг:
0

Maciej Los

То, как вы пытаетесь фильтровать данные, неверно. Пожалуйста, ознакомьтесь с документацией: Диапазон.Метод автофильтра (Excel) | Microsoft Docs[^]

1. я бы избегал использования приведенного ниже кода из-за взаимодействия с пользователем.

Set mainrng = Application.InputBox("Select the range ", "Advanced_Filter", Selection.Address, Type:=8)

Когда пользователь нажал Cancel, ваш код вернет ошибку.

2. Обратите внимание, что ниже приведен код:
For Each cell In crange
Avalue = """" & cell & ""","
Next cell

заменяет Avalue переменное содержание в каждой итерации.
Если вы хотели бы построить Criteria1, вы должны создать массив вариантов:
Criteria1:=Array("1", "3", "Seattle", "Redmond")


Давайте выясним, что передается в Criteria1 входной параметр:
Dim Avalue As String
Dim Vvalue As Variant

Avalue = "A,B,10,20"
Vvalue = Array(Avalue)

For i = LBound(Vvalue) To UBound(Vvalue)
    Debug.Print Vvalue(i)
Next


Совет: строка, разделенная запятыми, а не массив вариантов

Удачи вам!