2016-07-15 32 views
6

olarak kullanıyorum Diğer iletileri aradım ve benzer sorunları buldum, ancak özellikle bana yardımcı olabilecek hiçbir şey bulamadım. Bir dizi dizeyi almaya çalışıyorum ve bunu bir filtre ölçütü olarak kullanıyorum. Bu zor çünkü dizi bir işlev tarafından oluşturulur ve değişken sayıda öğe ve içeriğe sahiptir. Bunu almak için otomatik filtreye ihtiyacım var ve öğelerinin her biri için sütunu E'u kontrol et.Dize dizisini ölçüt olarak VBA otomatik filtresi

ben o iki yol

1)

With Sheet17 

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

End With 

Sonucu denedim: Sütun E bir süzgeç uygular ama seçeneklerinden herhangi birini başarısız

2)

For i = 0 To counter - 1 

    With Sheet17 

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

Next 

Not: Sayaç, dizi'daki öğelerin sayısını temsil eden bir tamsayıdır.Sonuç: Bu, dizi boyunca doğru bir şekilde döngüye giriyor, ancak yalnızca filtrede son seçeneği seçiyordur - muhtemelen, her geri dönüşü sırasında tekrar başladığından ve diğer seçeneklerden hiçbiri seçilmemesinden dolayı, yalnızca son seçenek işaretli olarak kalıyor.

cevap

5

AutoFilter için Excel belgeleri bazı yönlendirme sağlar. Operator parametresi, Criteria1'un nasıl yorumlandığını belirten bir XlAutoFilterOperator alır. Durumunuzda, xlFilterValues değerini belirtmek, Criteria1'un bir filtre değerleri dizisi olarak doğru bir şekilde yorumlanmasına neden olur.

Aşağıdaki örnek bu gösterir:

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

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

Bir diziden tek eleman aktarması gerekmez ve yalnızca E.

sütununa başvurmak eğer 5 inci alana kriterlerini koyamazsınız bir dizi geçerken
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 

Operator:=xlFilterValues belirtin ve Range.AutoFilter Method bir dizideki değerleri öğeleriyle sever.