VBA:循环Excel过滤器中的条件?

时间:2012-03-27 15:50:04

标签: excel vba loops

我整个上午都试图解决这个问题。有没有办法在Excel中的列过滤器中循环使用条件,同时使用条件名称填充数组?过滤器对象似乎只有criteria1和criteria2。对不起,如果我的任何术语不清楚,我对Excel很新。

(这是使用Excel 2007)

2 个答案:

答案 0 :(得分: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(惊喜),因为它是松散类型的

答案 1 :(得分:1)

我遇到了同样的问题,我希望有一个用户定义的字符串进行过滤,人们可以一次为多列提供列和过滤值。

在此示例中,字符串用户可以定义如下内容:

“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

上述函数将从一个字符串创建一个多维数组,其值可以与字符串中的Excels自动过滤器一起使用。使用代码:

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列上的多个条件不可用,如上例所示。