Объединение критериев множественного исключения (‹›) в автофильтре

Я обошел свою проблему, используя этот грязный хак:

    ' Filter managerial functions
    ActiveSheet.Range("$A$1:$BW$2211").AutoFilter Field:=36, Criteria1:="<>Head*", _
    Criteria2:="<>IT*", Operator:=XlAutoFilterOperator.xlAnd
    ActiveSheet.Range("$A$1:$BW$2211").AutoFilter Field:=36, Criteria1:="<>Local Head*", _
    Criteria2:="<>Resp*", Operator:=XlAutoFilterOperator.xlAnd
    ActiveSheet.Range("$A$1:$BW$2211").AutoFilter Field:=36, Criteria1:="<>Team Lead*", _
    Criteria2:="<>XB*", Operator:=XlAutoFilterOperator.xlAnd

Есть ли способ объединить эти 3 оператора в одну строку? Кажется, что у Excel есть проблема, как только у меня есть третий критерий (Criteria3) в одной строке. Более того, похоже, что ‹>Array() не поддерживается.


person denisq    schedule 05.10.2011    source источник


Ответы (1)


Расширенный фильтр может быть более подходящим для этой цели.

Вы также можете сделать что-то вроде этого:

Dim bUnion As Boolean
Dim i As Long
Dim vData As Variant
Dim rDataHide As Range

vData = Application.Transpose(ActiveSheet.Range("$AJ$1:$AJ$2211"))
bUnion = False

For i = 1 To 2211
  If LenB(vData(i)) Then
    If vData(i) Like Whatever Or vData(i) Like Whatever2 Then
      If bUnion Then
        Set rDataHide = Union(rDataHide, ActiveSheet.Range("$AJ$" & i))
      Else
        Set rDataHide = ActiveSheet.Range("$AJ$" & i)
        bUnion = True
      End If
    End If
  End If
Next i
rDataHide.Rows.Hidden = True

Вы даже можете использовать RegEx, хотя я действительно не использовал RegEx раньше, поэтому вам придется поискать его в Google.

person Jon49    schedule 05.10.2011
comment
Насколько я знаю, мне нужен диапазон на моем листе, чтобы использовать расширенный фильтр. Я предпочитаю иметь чистый код VBA со всеми критериями в одном массиве (что не работает для ‹›). - person denisq; 06.10.2011
comment
Однако при необходимости вы можете создать расширенный диапазон фильтров с помощью VBA. или даже просто добавьте рабочий столбец с тестом ИЛИ, используйте автофильтр, а затем уничтожьте рабочий столбец, когда закончите - person brettdj; 06.10.2011
comment
Я делаю то, что делает brttdj, когда я использую расширенный фильтр, создаю диапазон фильтров, а затем удаляю его после того, как я закончу его использовать. Вы также можете попробовать то, что я указал выше в отредактированном ответе. - person Jon49; 06.10.2011