Страницы: 1
RSS
Перебор критериев фильтра по списку на отдельном листе
 
Добрый вечер!
Подскажите пожалуйста, как реализовать перебор критериев фильтра по списку (на отдельном листе)?
На "Лист1" исходная таблица по столбцу "А" - Город, "В"- Здание, "С" - Этажность.
На "Лист2" критерии, т.е. данные без дубликатов с "Лист1".
Как последовательно и автоматически отфильтровать "Лист1" по столбцам "А","В","С" по списку на "Лист2"? Далее планируется скопировать значения списка на новый лист с новым именем по критериям (это понятно как реализовать). Никак не могу "допереть", как осуществить перебор критериев по списку с "Листа2" ((...
Искал на форуме, но никак не могу понять суть, как это все великолепие реализовать ...
 
Raccoon_s,
При объявлении переменных как у вас
Код
Dim iCol, iCol1, iCol2, LastRow As Long

только LastRow будет Long
Сделайте цикл по вашим критериям, что-то типа
Код
Sub test()
    Sheets("Лист1").Activate
Dim iCol, iCol1, iCol2, LastRow As Long
Dim r, r1 As Range
Dim myV As String
Dim myV1 As Variant
      Set r = Range("A1").CurrentRegion
    iCol1 = r.Find("Город", LookIn:=xlValues).Column
    iCol2 = r.Find("Этажность", LookIn:=xlValues).Column
  For i = 2 To 4
    myV = Sheets("Лист2").Cells(i, "A")    'город
    myV1 = Sheets("Лист2").Cells(i, "C")    'этажность
      r.AutoFilter Field:=iCol1, Criteria1:=myV
      r.AutoFilter Field:=iCol2, Criteria1:=myV1
      Worksheets.Add.Name = myV & "_" & myV1
      [a1] = ActiveSheet.Name
    Sheets("Лист1").Activate
    r.AutoFilter
   Next
End Sub
 
Kuzmich, спасибо Вам!!

LastRow тут в общем и не надо вроде как, в попытках собрать блуждающие мысли не заметил, что не удалил  :oops:  
 
Я имел в виду, что остальные переменные будут Variant
 
Добавил цикл по "этажности"
Код
    Sheets("Лист1").Activate
Dim iCol, iCol1, iCol2, myV1 As Variant
Dim r, r1 As Range
Dim myV As String
'Dim myV1 As Variant
      Set r = Range("A1").CurrentRegion
    iCol1 = r.Find("Город", LookIn:=xlValues).Column
    iCol2 = r.Find("Этажность", LookIn:=xlValues).Column
  For i = 2 To 4
  For j = 2 To 5
    myV = Sheets(Лист2").Cells(i, "a")    'Город
    myV1 = Sheets("Лист2").Cells(j, "c")    'Этажность
      r.AutoFilter Field:=iCol1, Criteria1:=myV
      r.AutoFilter Field:=iCol2, Criteria1:=myV1
      Worksheets.Add.Name = myV & "_" & myV1
      [a1] = ActiveSheet.Name
    Sheets("Лист1").Activate
    r.AutoFilter
   Next
Next

но теперь новые листы добавляются просто по критерию "этажности", т.е. не фильтруются данные на "Лист1".
Изменено: Raccoon_s - 17.11.2019 10:49:31
 
Найди триодно отличия
Код
myV = Sheets(Лист2").Cells(i, "a")    'Город
myV1 = Sheets("Лист2").Cells(j, "c")    'Этажность
 
Цитата
RAN написал: Найди триодно отличия
да косяк, при добавлении кода (язык слетел), кавычку потер случайно, так-то она есть
Код
    Sheets("Лист1").Activate
Dim iCol, iCol1, iCol2, myV1 As Variant
Dim r, r1 As Range
Dim myV As String
'Dim myV1 As Variant
      Set r = Range("A1").CurrentRegion
    iCol1 = r.Find("Город", LookIn:=xlValues).Column
    iCol2 = r.Find("Этажность", LookIn:=xlValues).Column
  For i = 2 To 4
  For j = 2 To 5
    myV = Sheets("Лист2").Cells(i, "a")    'Город
    myV1 = Sheets("Лист2").Cells(j, "c")    'Этажность
      r.AutoFilter Field:=iCol1, Criteria1:=myV
      r.AutoFilter Field:=iCol2, Criteria1:=myV1
      Worksheets.Add.Name = myV & "_" & myV1
      [a1] = ActiveSheet.Name
    Sheets("Лист1").Activate
    r.AutoFilter
   Next
Next
Изменено: Raccoon_s - 17.11.2019 15:40:53
Страницы: 1
Наверх