VBA AutoFilter基于数组数组的多个工作表,如果不在列表中则忽略

假设我有一个有3个工作表的工作簿。 我已经根据等于俄亥俄州的状态过滤了第一张纸。 然后我从列ID中得到这个过滤列表的值列表,并把它们放到一个整数/长整型数组中。 基本上我把所有的ID的每一行的状态列俄亥俄州

我现在试图根据它们的ID列匹配我的数组ID列表来过滤剩余的表。 问题是,当它遇到不在新工作表中的过滤ID时 ,而不是为每个工作表提供匹配,只剩下最后一个匹配值。 下面是我的VBA试图过滤剩余表单的示例:

For Each sheet In Worksheets If sheet.Name <> "Sheet1" Then sheet.Activate columnNum = ActiveSheet.UsedRange.Find("ID").Column ActiveSheet.AutoFilterMode = False ActiveSheet.UsedRange.AutoFilter '***Problem is here ActiveSheet.UsedRange.AutoFilter Field:=columnNum, Criteria1:=mainIDs, Operator:=xlFilterValues End If Next 

正如我前面提到的, mainIDs是一个Integer数组,它被传递到每个表单进行过滤。 为什么只把我带回上一场比赛? 我是否需要以某种方式告诉它忽略不在新工作表中的过滤值? 怎么样?

编辑:这是我如何填充我的数组

 Dim mainIDs() As Long, size As Integer, i As Integer size = ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 2 ReDim mainIDs(size) i = 0 For Each row In .UsedRange.Columns(1).SpecialCells(xlCellTypeVisible) If row.Value <> "ID" Then '***Column header mainIDs(i) = row.Value i = i + 1 End If Next 

如果使用数组进行筛选,则必须先将值转换为string。 据我所知,你正在给数组添加整数/长整型值。 自动filter不能使用这个。

此外,您必须将您的数组更改为string数组mainIDs() as String或将其声明为Variant。

 For Each row In .UsedRange.Columns(1).SpecialCells(xlCellTypeVisible) If row.Value <> "ID" Then '***Column header mainIDs(i) = Cstr(row.Value) 'Cast values to string i = i + 1 End If Next 

那么它应该工作,请让我知道,如果它帮助你。

如果你使用数组作为条件 ,你将不得不使用一维数组。
但是,您需要提供Operator参数来实际过滤数组中的所有内容。

样品:

 ActiveSheet.UsedRange.AutoFilter Field:=columnNum, _ Criteria1:=mainIDs, _ Operator:xlFilterValues 

要了解更多关于AutoFilter方法的信息,请查看MSDN 。