Ребят, HELP!!! Не пойму как сделать макрос, который будет работать с фильтрами. Цель такая: Есть первый столбец с n количеством значений и есть второй столбец, в другом листе этой же книги, который содержит в себе повторяющиеся значения как в первом столбце. Нужно отфильтровать первый столбец так, чтобы фильтр взял за основу значения из второго столбца, засунул себе в критерий отбора (не знаю как правильно, для меня это список значений с галочками, которые вручную очень долго надо клацать) и выдал результат в виде отфильтрованных значений. Я приложил файл где пример этих столбцов есть. Я даже не понимаю с чего начать, поэтому и обращаюсь к Вам.
Пример макроса могу показать из макрорекордера со своими дополнениями, но как обычно по незнанию лезут ошибки.
Код
Sub Ìàêðîñ1()
ActiveSheet.Range("$D$2:$I$51586").AutoFilter Field:=3, Criteria1:=Array( _
ActiveWorkbook.Worksheets("Ëèñò3").Range("$D$2:$I$51586")), Operator:=xlFilterValues
End Sub
Option Explicit
Sub Макрос1()
Dim filterValuesRn As Range, RangeToAutofilterRn As Range, filterArr() As String, i As Long
' Диапазон 2 (значения в фильтр)
Set filterValuesRn = ThisWorkbook.Sheets(2).Range("A2:A14")
' Диапазон 1 (что фильтруем)
Set RangeToAutofilterRn = ThisWorkbook.Sheets(1).Range("B1:B26")
' Массив со значениями для фильтрациии
' Заполняем из диапазона 2
ReDim filterArr(0 To filterValuesRn.Cells.Count - 1)
For i = 0 To filterValuesRn.Cells.Count - 1
filterArr(i) = filterValuesRn.Cells(i + 1)
Next i
' Если на листе с диапазоном 1 уже есть автофильтр - сначала снимем все текущие фильтры
If RangeToAutofilterRn.Parent.AutoFilterMode = True Then RangeToAutofilterRn.Parent.AutoFilter.ShowAllData
' Применим фильтр
RangeToAutofilterRn.AutoFilter Field:=1, Criteria1:=filterArr, Operator:=xlFilterValues
End Sub
Большое спасибо за вариант! Прям то, что нужно. Я настроил его под свою книгу и у меня вылетела ошибка. Я только поменял имена столбцов и листов, а так же изменил величину диапазона ячеек. Ваш пример в документе работает отлично, вот то что надо, а когда настраиваю под себя, то дает сбои почему-то. Пытался и ячейку выделить, к которой применять фильтр и проверил ячейки на объединение, но все напрасно. Пока не знаю в чем причина ошибки.
Код
Sub Макрос1()
Dim filterValuesRn As Range, RangeToAutofilterRn As Range, filterArr() As String, i As Long
' Диапазон 2 (значения в фильтр)
Set filterValuesRn = ThisWorkbook.Sheets(3).Range("A1:A150")
' Диапазон 1 (что фильтруем)
Set RangeToAutofilterRn = ThisWorkbook.Sheets(4).Range("F1:F70000")
' Массив со значениями для фильтрациии
' Заполняем из диапазона 2
ReDim filterArr(0 To filterValuesRn.Cells.Count - 1)
For i = 0 To filterValuesRn.Cells.Count - 1
filterArr(i) = filterValuesRn.Cells(i + 1)
Next i
' Если на листе с диапазоном 1 уже есть автофильтр - сначала снимем все текущие фильтры
If RangeToAutofilterRn.Parent.AutoFilterMode = True Then RangeToAutofilterRn.Parent.AutoFilter.ShowAllData
' Применим фильтр
RangeToAutofilterRn.AutoFilter Field:=1, Criteria1:=filterArr, Operator:=xlFilterValues
End Sub
victorSwild, хм, проверил Ваш код - у меня все сработало, см. приложение (только диапазон уменьшил с 7000 до 1000 чтобы пример влез в 100кб, но 7000 тоже работал). Не могли бы Вы сделать какой-то пример из Ваших данных для теста?
tolstak, сейчас попробую уменьшить свою таблицу и скинуть пример.
Вот: Я понял ошибку. У меня порядок листов был не верный: Лист4, Лист1, Лист2, Лист3, а надо по порядку верному. Поменял их между собой и все заработало!
tolstak, так вот как это делать, а я пробовал без кавычек, просто в скобках имя прописывать, потом ошибка все равно была. Спасибо большое за помощь! Вы мне очень помогли с вопросом!