我整个上午都试图解决这个问题。有没有办法在Excel中的列过滤器中循环使用条件,同时使用条件名称填充数组?过滤器对象似乎只有criteria1和criteria2。对不起,如果我的任何术语不清楚,我对Excel很新。
(这是使用Excel 2007)
答案 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列上的多个条件不可用,如上例所示。