Фильтровать таблицу для каждой строки из другой таблицы - PullRequest
0 голосов
/ 18 января 2019

Что мне нужно сделать, так это отфильтровать таблицу, используя второй столбец из каждой строки другой таблицы. Таблица, которую я перебираю, содержит 11 строк, а код повторяется 11 раз, но каждый раз используется 11-я строка. Что нужно сделать, это перейти от первого ряда до последнего ряда.

Я использовал это как источник

Редактировать: С помощью Вариата я применил count вместо For Each. Похоже, что можно пройти через все строки, кроме последнего. продолжение следует.

Edit2: для тех, кому любопытно, взгляните на мой дополнительный вопрос, где у меня есть все для работы! Фильтрация таблицы по массиву критериев, полученных из другой таблицы

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 голосов
/ 18 января 2019

Рассмотрите возможность настройки кода фильтрации с максимальным количеством критериев, которые вы хотите иметь в виду, например, (здесь показано только 3),

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

Установите UBound для myGroupNameFilter вто же самое максимальное количество.Используйте цикл чтения критериев для заполнения массива 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

Дело в том, что вы не можете установить фильтр в цикле, в котором вы устанавливаете критерии фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...