Фильтровать таблицу для каждой строки из другой таблицы

Не думаю, что вам нужно указать, где T: A.

T будет B, когда вы используете класс B: A

Это также известно как CRTP или любопытно повторяющийся шаблон шаблона и является известной идиомой.

0
задан Joey b 18 January 2019 в 14:26
поделиться

1 ответ

Рассмотрите возможность настройки кода фильтрации с максимальным количеством критериев, которые вы хотите иметь в распоряжении, например, так (здесь показано только 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

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

0
ответ дан Variatus 18 January 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: