Использование массива для критериев автофильтра

У меня есть приведенный ниже код, который удалит строки на основе критериев в столбце I:

Sub Strip()
    Dim rng As Range

    With ActiveSheet
        .Columns("I").AutoFilter Field:=1, Criteria1:="=70-79%", VisibleDropDown:=False
        Set rng = .AutoFilter.Range
    End With
    If rng.Columns("I").SpecialCells(xlCellTypeVisible).Count - 1 > 0 Then
        Application.DisplayAlerts = False
        rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).Delete
        Application.DisplayAlerts = True
    End If
    rng.AutoFilter
End Sub

У меня есть около 100 разных критериев, по которым я хочу действовать таким образом. Я бы предпочел не повторять этот код 100 раза, и поэтому может ли кто-нибудь сказать мне, как закодировать это в виде массива? Я пробовал разные методы, но не могу заставить его работать.


person Joe Wilson    schedule 17.06.2017    source источник
comment
@Джипед. Я прошел по ссылке. Я могу что-то упустить здесь. :) Как этот вопрос является дубликатом? Этот вопрос касается совершенно другой темы.   -  person Siddharth Rout    schedule 17.06.2017
comment
У вас есть 100 различных критериев. Вы создаете словарь значений из ключевого столбца, перебирая строки, добавляя или не добавляя в соответствии со своими 100 критериями. Затем вы фильтруете по ключам и удаляете.   -  person    schedule 17.06.2017
comment
Извините, но я с уважением не согласен с вами. Я снова открываю ветку   -  person Siddharth Rout    schedule 17.06.2017


Ответы (1)


Использовать

.Columns("I").AutoFilter Field:=1, Criteria1:=MyArray,  Operator:=xlFilterValues

Где MyArray — массив строк

Пример

Dim MyArray(1 To 4) As String

MyArray(1) = "This"
MyArray(2) = "is"
MyArray(3) = "an"
MyArray(4) = "array"

'
'~~> Rest of code
'

.Columns("I").AutoFilter Field:=1, Criteria1:=MyArray, Operator:=xlFilterValues

'
'~~> Rest of code
'

Скриншот

введите описание изображения здесь

person Siddharth Rout    schedule 17.06.2017
comment
Будет ли это также работать, если массив из параметра ParamArray? - person Romcel Geluz; 17.06.2017
comment
К сожалению, сочетание типов данных вызывает проблемы. Критерии автофильтра должны иметь тип String. Например, если вы замените MyArray(2) = "is" на MyArray(2) = 1, а As String на As Variant, это значение не будет отфильтровано. - person Siddharth Rout; 17.06.2017
comment
Спасибо, мне есть во что поиграть. - person Romcel Geluz; 17.06.2017
comment
Вы можете преобразовать каждый элемент массива в строку, используя CSTR - person Siddharth Rout; 17.06.2017