Создайте VBA L oop для просмотра каждого критерия в автофильтре - PullRequest
0 голосов
/ 06 февраля 2020

Начну с того, что понятия не имею, правильно ли я задаю этот вопрос ... обнадеживает, да?

У меня есть таблица Excel, первая строка которой содержит заголовки столбцов с автофильтры активированы. Я пытаюсь создать al oop в VBA, где «проверяется» первый отдельный критерий из поля автофильтра: = 2 и отображаются отфильтрованные данные; затем «не проверяется» и не показывается; и затем «следующий» критерий в поле фильтра «проверяется», и отфильтрованные данные отображаются; затем «не проверяется» и не отображается, и т. д.

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

То, чего я пытаюсь, или, скорее, надеюсь, избежать, - это создание отдельного диапазона значений, разделенных запятыми, для массива, так как их много. критерия в поле автофильтра: = 2, и эти критерии в поле автофильтра: = 2 иногда изменяются. Может быть, это возможно, а может и нет.

Любая помощь или руководство очень приветствуются!

ОБНОВЛЕНИЕ - Я подумал, что может быть проще отфильтровать уникальные значения в столбце B, а затем вставить эти значения в отдаленное место, столбец S, на листе. Затем я записал макрос фильтра basi c и изменил критерии 1: = на ячейки (ui c, 19), значения в столбце S и создал команду do while l oop, чтобы запустить фильтр по критериям в столбце S добавляя +1 перед каждым l oop.

Код ниже -

 Sub filter_example()
 Dim lastrowuic, lastrowarray As Long
 lastrowuic = Cells(Rows.Count, "B").End(xlUp).Row
 lastrowarray = Cells(Rows.Count, "S").End(xlUp).Row
 Dim uniquesArray As Variant
 uniquesArray = Range("B2:B" & lastrowuic)
 Dim uic As Integer
 uic = 2

 With Sheet1
    Sheets("Sheet1").Columns("B:B").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=.Range("S1"), Unique:=True
 End With

 Do While lastrowarray
    ActiveSheet.Range("$A$1:$S$21").AutoFilter=2,Criteria1:=Cells(uic, 19)
 ClearAllFilters = True
 uic = uic + 1
 Loop

 End Sub

Две области, которые могут позволить себе очистить, - это activesheet.range и действительно конец. Этот l oop делает то, что я хочу, но я бы хотел, чтобы он вышел из l oop, как только он попадет в первую пустую строку, следующую за последней строкой данных, в столбце «S» (он же 19), а затем очистить фильтр в автофильтре = 2. Это действительно так. В противном случае это делает то, что я хочу.

Любая дополнительная помощь приветствуется!

...