2012-03-27 51 views
2

我一直想弄明白這一點。有沒有辦法在Excel中的列過濾器中循環條件,同時使用條件的名稱填充數組?看來過濾器對象只有一個criteria1和criteria2。對不起,如果我的任何術語不清楚,我對Excel很新。VBA:通過Excel篩選器中的標準循環?

(這是使用Excel 2007)

+0

哪個版本的Excel? – 2012-03-27 15:51:29

+0

這是Excel 2007,對不起。 – superadamwo 2012-03-27 15:53:17

+0

嗯我只得到2010年和2003年。2007年有多指標複選框方式指定標準? – 2012-03-27 15:54:45

回答

1

似乎如果你有然後選擇1個或2個標準這些將被存儲在.Criteria1.Criteria2

不過,如果你有2個以上則.Criteria1成爲選擇的過濾器的陣列 - 你可以再通過使用迭代...

Dim iFilt As Integer  'This should be set equal to the column 
          'index you are interested in 

Dim iFiltCrit as Integer 

For iFiltCrit = 1 To UBound(Sheet1.AutoFilter.Filters(iFilt).Criteria1) 
    Debug.Print Sheet1.AutoFilter.Filters(iFilt).Criteria1(iFiltCrit) 
Next 

注意,這隻適用於擁有超過一列2標準 - 你如何確定是否是這種情況取決於你 - 這是一個相當笨重的Excel API(驚喜),因爲它是鬆散的類型。

+0

到目前爲止,我還沒有能夠得到這個工作。這是我的代碼: '昏暗iFiltCrit作爲整數 Debug.Print(UBound函數(ActiveSheet.AutoFilter.Filters(projCol).Criteria1)) 對於iFiltCrit = 1到UBound函數(ActiveSheet.AutoFilter.Filters(projCol).Criteria1) Debug.Print(ActiveSheet.AutoFilter.Filters(projCol))。Criteria1(iFiltCrit)) Next' Ubound的值爲4,但它給出了一個錯誤,指出「Property let procedure not defined and property get procedure does not return an object」 – superadamwo 2012-03-27 17:04:46

+0

我想你可能無法使用Criteria1數組上的索引,因爲儘管該代碼不起作用,但似乎使用For Each循環。 – superadamwo 2012-03-27 18:09:04

+0

嗯是的,我也設法得到這個錯誤。它昨天晚上在工作!典型的Excel VBA怪異。害怕我現在放棄。祝你好運! :) – 2012-03-28 07:55:04

1

我有同樣的問題,我想有一個用戶定義的字符串進行過濾,其中人們可以一次給多列的列和filtervalue。

在這個例子中,字符串用戶可以自定義的樣子:

「A,FOO; B,酒吧; AD,面目全非」
或者 「ColumnLetterOrIndex逗號FilterValue分號」 重複。 等等的任何數量的列和值。

代碼:

Public Function createFilter(filterstring as string) as Variant 
Dim tempFilter As Variant 
Dim realFilter As Variant 

tempfilter = Split(filterstring, ";") 
For i = LBound(tempfilter) To UBound(tempfilter) 
    ReDim Preserve realFilter(i) 
    realFilter(i) = Split(tempfilter(i), ",", 2) 
'The 2 is needed if the filtervalue contains a comma on itself. Otherwise, it can be omitted. 
Next i 
createFilter = realFilter 
End Function 

上述功能將創建從該值可與來自一個字符串優異自動篩選中使用的字符串的多維陣列。使用代碼:

Dim userFilter as Variant 
userFilter = createFilter(userDefinedFilterString) 
For i = LBound(userFilter) To UBound(userFilter) 
    'Note that here you'll have to convert the Columnletter to something numeral, unless the users define their column like 1, 2, 3 instead of A, B, C. 
    thefiltercolumn = Measure.filter(i)(0) 
    .AutoFilter thefiltercolumn, Measure.filter(i)(1) 
Next i 

當filtervalues都等於「不等於」或「包含了」,你可以使用Excel內置的這樣做的方式,例如

A,<>foo;B,*bar*;AD,>=5 

壞的部分:在第1列的多個條件,不提供象前面的例子英寸