2014-06-11 46 views
0

我剛剛學習使用數組,並且對如何將數組用作自動篩選條件的輸入存在困惑。我想設置一個數組的值,然後使用這些相同的值來過濾Excel電子表格。我做了下面的代碼,但它一直扔了一個錯誤,當我嘗試自動篩選我如何使用數組作爲條件自動篩選

這裏是我的代碼

Dim I As Integer 
ReDim arr(1 to var) As Variant 'var is defined in a different function with a # 
I = 1 
For Each rngValue In rngValues.cells 'rngValues is defined in a different function 
    If rngValue ="c" then 
     arr(I)=rngValue.Offset(0,2) 
    End If 
    I = I +1 
Next rngValue 

arr(I) = "=" 

With ws1 
    .[A1].Autofilter Field:=1, Criteria1:=arr, operator:xlfiltervalues 
End With 

回答

0

可能是你可以試試這個

fil = Split(Join(Application.Transpose(Range("list")))) ' here list is the name of the range 
    Range("A1").AutoFilter field:=1, Criteria1:=fil, Operator:=xlFilterValues 'it will only filter the list values 
+0

我嘗試了類似的東西,但我使用的不是範圍數組。 – Monduras

0

你可以通過Range值直接將數組傳遞給像下面這樣的數組:

Dim arr As Variant '~~> no need to re-dimension 
arr = Application.Transpose(rngValues) '~~> Transpose produces 1D array 
ws1.Range("A1").AutoFilter 1, arr, xlFilterValues 

請注意,rngValue只能包含一個維度範圍區域。
但是,如果你想堅持你的邏輯;還處理2維範圍或不連續的範圍內,下面應該工作:

Dim i As Long: i = 1 
ReDim arr(1 to rngValues.Cells.Count) 
For Each rngValue In rngValues 
    arr(i) = rngValue.Value 
    i = i + 1 
Next 
ws1.Range("A1").AutoFilter 1, arr, xlFilterValues 

在任一場景中,確保所產生的陣列被用作過濾器是一維。

+0

謝謝!只是好奇 - 第二個代碼與我嘗試的代碼有什麼不同?我遇到的問題是,我也只希望從myvalues範圍的一些值不是所有這些都是爲什麼我去了一個數組 – Monduras

+0

我試過第二個代碼,它仍然導致範圍類的自動過濾器方法失敗的錯誤 – Monduras

+0

@Monduras唯一的區別是你使用評估範圍'[A1]'。邏輯基本相同。我看不出爲什麼它不應該工作。在你編輯的代碼中,我認爲你應該在你的if語句中迭代我。 – L42