Фильтр для нескольких критериев, включая список и подстановочный знак - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать фильтр для столбца A, который будет фильтровать как список данных (Range("Symbols")), так и все, что начинается с символа ^.

Это мой код прямо сейчас (включая только часть, которая относится к фильтру):

Dim ar As Variant

ar = Range("Symbols")
ar = Application.Transpose(ar)
ar = Split(Join(ar, ","), ",")

With sht1.Range("A1", sht1.Range("Y" & Rows.Count).End(xlUp))

.AutoFilter Field:=1, Criteria1:=ar, Operator:=xlFilterValues, Operator:=xlOr, Criteria2:="=^*"
End With

Для приведенного выше кода я получаю только данные Range("Symbols"). Данные, начинающиеся с символа ^, не отображаются.

Я также пытался:

.AutoFilter Field:=1, Criteria1:=ar, Operator:=xlOr, Criteria2:="=^*"

Для приведенного выше кода я получаю все данные, начиная с символа ^, но не данные Range("Symbols").

И

.AutoFilter Field:=1, Criteria1:="=^*", Operator:=xlOr, Criteria2:=ar, Operator:=xlFilterValues

Для приведенного выше кода я получаю все данные, начиная с символа ^, но не данные Range("Symbols").

И

.AutoFilter Field:=1, Criteria1:=Array(ar, "=^*"),Operator:=xlFilterValues

Выше приведено сообщение об ошибке несоответствия типов.

1 Ответ

1 голос
/ 27 февраля 2020

Я не думаю, что вы можете сделать это с помощью AutoFilter, но вы можете сделать это с помощью Advanced Filter.

. В приведенном ниже коде я копирую Range("Symbols") в другую область на листе, а затем удаляю это (найти неиспользуемую область), но вы можете использовать Range("Symbols"), если заголовок диапазона идентичен заголовку Field1.

'Dim ar As Variant

'ar = Range("Symbols")
'ar = Application.Transpose(ar)
'ar = Split(Join(ar, ","), ",")

Dim rgCrit As Range
Range("symbols").Copy Range("AA2")

'copy criteria range to an unused area on the sheet
Range("AA1") = Range("A1")
Set rgCrit = Range("AA1").Resize(Range("symbols").Rows.Count + 1)

'add the ^* criteria to the range
rgCrit(rgCrit.Rows.Count, 1) = "^*"

With Sheet4.Range("A1", Sheet4.Range("Y" & Rows.Count).End(xlUp))
    .AdvancedFilter xlFilterInPlace, rgCrit
End With

'Doesn't clear filtered cells
'rgCrit.Clear
Dim c As Range
    For Each c In rgCrit
        c.Clear
    Next c


End Sub

Вот несколько скриншотов, демонстрирующих до и после

Колонка без фильтра

enter image description here

Допустимый диапазон символов

enter image description here

Отфильтрованный столбец Обратите внимание на присутствующие строки, начинающиеся с ^

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...