2011-10-05 8 views
5

he trabajado alrededor de mi problema utilizando este truco sucio:Combinar la exclusión múltiple (<>) criterios de Autofiltro

' 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 

¿Hay alguna manera de combinar estos 3 estados en una sola línea? Excel parece tener un problema tan pronto como tengo un tercer criterio (Criteria3) en una línea. Además, <> Array() parece no ser compatible.

Respuesta

1

Un filtro avanzado puede ser más adecuado para este propósito.

También podría hacer algo como esto:

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 

Incluso puede utilizar expresiones regulares, no he utilizado expresiones regulares mucho antes, aunque por lo que tendría que google.

+0

AFAIK, necesito un rango en mi hoja de trabajo para usar el filtro avanzado. Prefiero tener un código VBA puro con todos los criterios en una matriz (que no funciona para <>). – denisq

+1

Puede crear el rango de filtro avanzado con VBA, si es necesario. o incluso simplemente agregue una columna de trabajo con una prueba OR, Autofiltro que, a continuación, destruya la columna de trabajo cuando termine – brettdj

+0

Hago lo que hace brettdj cuando uso filtro avanzado, creo el rango de filtro y luego lo elimino después de haber terminado de usarlo. También puede probar lo que puse arriba en la respuesta editada. – Jon49

Cuestiones relacionadas