VBA Macro автофильтр для диапазона - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь отфильтровать набор данных на основе заданного диапазона переменных.Они будут объявлены пользователем электронной таблицы в заданной области «домашней» таблицы.Однако при запуске макроса он не даст результатов.Я пытался решить эту проблему несколькими способами, но ничего не дало желаемых результатов.

До сих пор я пытался использовать операторы, объявляя значения в виде массива, фильтруя диапазон ячеек, которые будут содержать значения, а также подстановочные знаки.

Мой текущий код такой, как показано ниже, ни один из них не возвращает вывод, который мне нужен

Dim fliterStr As Variant
filterStr = wsHome.Range("R6:R12").Value
wsMissing.Range("G1").AutoFilter field:=7, Criteria1:=filterStr

wsMissing.Range("G1").AutoFilter field:=7, Criteria1:="*X*", Operator:=xlFilterValues, Criteria2:="*Y*"

ожидаемый результат - фильтр, ищущий любые значения, соответствующие переменным в диапазоне R6: R12, однако в настоящее время это возвращается как пустое.

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

1 Ответ

0 голосов
/ 04 мая 2019

Массив для критериев AutoFIlter работает для массива 1-D .Когда вы берете кусок столбца, вы создаете массив 2-D .Вам нужно использовать TRANSPOSE() для его преобразования.

Скажем, у нас есть Sheet1:

enter image description here

и Sheet2:

enter image description here

Работа:

Sub AutoDemo()
    Dim wsHome As Worksheet, wsMissing As Worksheet
    Dim rng1 As Range, rng2 As Range, wf As WorksheetFunction
    Dim filterStr

    Set wsHome = Sheets("Sheet1")
    Set wsMissing = Sheets("Sheet2")

    Set wf = Application.WorksheetFunction

    Set rng1 = wsHome.Range("A1:G20")

    Set rng2 = wsMissing.Range("R6:R12")
    filterStr = wf.Transpose(rng2)

    rng1.AutoFilter Field:=7, Criteria1:=filterStr, Operator:=xlFilterValues

End Sub

даст:

enter image description here

TRANSPOSE() создает массив 1-D .

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