Просто чтобы дать вам представление о том, как я буду пытаться решить этот код, вы можете увидеть ниже мое предложение, используя AdvancedFilter
с приведенными ниже примерами данных:
Подготовьте второй лист со следующими данными:
В следующем коде будет использоваться AdvancedFilter
, один из более быстрых способов фильтрации больших наборов данных (есть и другие методы, например AutoFilter
):
Sub Transfer()
'Dim your variables
Dim rng1 As Range, rng2 As Range
Dim lr1 As Long, lr2 As Long
'Set ranges to work with
lr1 = Blad1.Cells(Blad1.Rows.Count, "A").End(xlUp).Row '*1
lr2 = Blad2.Cells(4, "A").End(xlDown).Row
Set rng1 = Blad1.Range("A1:B" & lr1)
Set rng2 = Blad2.Range("A1:B2")
'Prepare CopyToRange range for new dataset
Blad2.Range("A4:B" & lr2).Clear '*2
'Filter data towards sheet2
rng1.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rng2, CopyToRange:=Blad2.Range("A4")
End Sub
* 1 : В коде я использовал CodeName
рабочего листа, так как при использовании прямых ссылок лучше всего сохранять код, указывающий на правильные места.Вы можете найти эти имена в проводнике проекта (см. Ниже), поэтому измените их соответственно в коде.
*2 : Используя AdvancedFilter
, мы можем решить скопировать отфильтрованный диапазон в указанное место, в этом случае я решу поместить его под наш CriteriaRange
, поэтому всегда ясно, при каких условияхТаблица извлечена из основных данных листа 1.
Вывод будет выглядеть следующим образом:
Теперь вы можетеизмените CriteriaRange
, например <>apple
и повторите код.Выход будет тогда