VBA:循环通过Excel筛选器中的条件?

我一直想弄明白这一点。 有没有办法在Excel中的列filter中循环条件,而使用条件的名称填充数组? 看来过滤对象只有一个criteria1和criteria2。 对不起,如果我的术语不清楚,我很新的Excel。

(这是使用Excel 2007)

看来,如果你有1或2个标准select,那么这些将存储在.Criteria1.Criteria2

但是,如果你有2个以上的.Criteria1成为一个选定的filter的数组 – 你可以通过使用迭代…

 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(惊喜),因为它是松散types的。

我有同样的问题,我想有一个用户定义的string进行过滤,其中人们可以一次给多列的列和filtervalue。

在这个例子中,string用户可以像下面这样定义:

“A,foo; B,bar; 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 

上面的函数将从一个string中创build一个multidimensional array,这个值可以和Excels自动filter一起使用。 使用代码:

 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 

当过滤值等于“不等于”或“包含”时,可以使用excel的内置方式来做到这一点,例如

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

错误部分:1列上的多个条件不像前面的示例中那样可用。