从另一张表中为每一行过滤一张表

时间:2019-01-18 09:10:59

标签: excel vba foreach count autofilter

我需要做的是通过使用另一个表的每一行的第二列来筛选整个表。我循环访问的表包含11行,并且代码循环执行11次,但是每次都使用第11行。它需要做的是从第一行到最后一行。

I have used this as source

编辑:在Variatus的帮助下,我应用了count而不是For Each。这似乎可以遍历除最后一行以外的所有行。 待续。

Edit2:对于那些有好奇心的人,看看我的后续问题,我可以解决所有问题! Filter a table with an array of criteria derived from another table

Sub LoopDoorAfdelingV4()

Dim myTable As ListObject
Dim myTable2 As ListObject
Dim oRow As ListRow
Dim c As Long


Dim myGroupIDFilter As Variant
Dim myGroupNameFilter As Variant

Set myTable = ActiveSheet.ListObjects("TabelGroupID")
Set myGroupIDFilter = myTable.ListColumns(1).Range
Set myGroupNameFilter = myTable.ListColumns(2).Range
Set myTable2 = ActiveSheet.ListObjects("TabelAfdelingenIntern")


For c = 1 To myTable.ListRows.Count

ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=myGroupNameFilter(c), _
 Operator:=xlOr
Next c

End Sub

1 个答案:

答案 0 :(得分:0)

考虑使用您希望能够处理的最大数量的条件来设置过滤代码,如下所示(此处仅用3个示例进行演示)

ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=myGroupNameFilter(1), _
Criteria2:=myGroupNameFilter(2),Criteria3:=myGroupNameFilter(3),Operator:=xlOr

myGroupNameFilter的UBound设置为相同的最大数字。使用循环读取条件填充myGroupNameFilter数组。用未知值填充您没有任何值的myGroupNameFilter元素,这些随机值在要过滤的列表中可能不存在,例如“ XYZ987”或-99999。过滤器应返回指定的结果,因为找不到匹配项的条件不会影响结果。

我讨厌发布此代码,因为它肯定无法正常工作,并且我无法进行测试。旨在仅显示该想法。

Dim Flt(1 To 15) As Variant

For i = 1 To 15
    If i > myTable.ListRows Then
        ' a value which doesn't exist in your Table2
        Flt(i) = "123XYZ"
    Else
        ' assign a value on which you intend to filter
        Flt(i) = myTable.ListRows(i).Cells(1).Value
    End If
Next

ActiveSheet.Range(myTable2).AutoFilter Field:=1, Criteria1:=Flt(1), _
                                                 Criteria2:=Flt(2), _
                                                 Criteria3:=Flt(3), _
                                                 Criteria4:=Flt(4), _
                                                 Criteria5:=Flt(5), _
                                                 Criteria6:=Flt(6), _
                                                 Criteria7:=Flt(7), _
                                                 Criteria8:=Flt(8), _
                                                 Criteria9:=Flt(9), _
                                                 Criteria10:=Flt(10), _
                                                 Criteria11:=Flt(11), _
                                                 Criteria12:=Flt(12), _
                                                 Criteria13:=Flt(13), _
                                                 Criteria14:=Flt(14), _
                                                 Criteria15:=Flt(15), _
                                        Operator:=xlOr

重点是您不能在设置过滤条件的循环中设置过滤器。