2016-07-15 151 views
6

Ho cercato altri post e ho riscontrato problemi simili, ma nulla che potesse aiutarmi in modo specifico. Sto cercando di prendere una serie di stringhe e usarla come criterio di filtro. È difficile perché la matrice è creata da una funzione e ha un numero variabile di elementi e contenuti. Ho bisogno dell'autofiltro per prenderlo e controllare la colonna E per ognuno dei suoi elementi.Utilizzo dell'array di stringhe come criterio nel filtro automatico VBA

ho provato due modi

1)

With Sheet17 

.Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr) 

End With 

Risultato: applica un filtro a colonna E, ma non riesce a selezionare una qualsiasi delle opzioni

2)

For i = 0 To counter - 1 

    With Sheet17 

    .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i)) 
End With 

Next 

Nota: il contatore è un numero intero che rappresenta il numero di elementi nell'array Risultato: Questo loop scorre correttamente attraverso l'array ma seleziona solo l'ultima opzione sul filtro, presumibilmente perché ogni volta che il ciclo torna indietro, si riavvia e deseleziona ogni altra opzione in modo che alla fine rimanga selezionata solo l'opzione più recente.

risposta

5

La documentazione di Excel per AutoFilter fornisce alcune indicazioni. Il parametro Operator prende uno XlAutoFilterOperator che specifica come viene interpretato Criteria1. Nel tuo caso, specificando un valore di xlFilterValues, il numero Criteria1 verrà interpretato correttamente come un array di valori di filtro.

L'esempio seguente dimostra questo:

Dim arr As Variant 
arr = Array("Alpha", "Bravo", "Charlie") 

Sheet17.Range("E1").AutoFilter _ 
    Field:=5, _ 
    Criteria1:=arr, _ 
    Operator:=xlFilterValues 
6

Non è necessario trasporre un singolo elemento di un array e non si può mettere i criteri in 5 ° campo se si sta solo riferendo colonna E.

Dim i As Long, arr As Variant 
arr = Array(1, 3) 

With Sheet17 
    'to filter each value in the array one at a time 
    For i = 0 To UBound(arr) 
     .Columns("E").AutoFilter Field:=1, Criteria1:=arr(i) 
    Next i 

    'my values were numbers - AutoFilter likes strings in its array 
    For i = LBound(arr) To UBound(arr) 
     arr(i) = CStr(arr(i)) 
    Next i 

    'to filter all values in the array at once specify xlFilterValues 
    .Columns("E").AutoFilter Field:=1, Criteria1:=arr, _ 
          Operator:=xlFilterValues 
End With 

Specifica la Operator:=xlFilterValues quando passa una matrice e la Range.AutoFilter Method piace stringhe come i valori in un array.

Problemi correlati