Фильтр листков VBA Loop с использованием нескольких переменных
Я пытаюсь предоставить удобную вкладку поиска для некоторых моих сотрудников, чтобы они могли легко фильтровать через большую таблицу данных для определенных записей, а затем копировать строку из главного списка и вставить на вкладку поиска.
Приведенный ниже код действительно работает и копирует данные из записей, которые соответствуют, к сожалению, «страна» – единственный критерий, который работает, а остальные ничего не делают.
То, что я пытаюсь сделать, – это настроить код, который я написал, чтобы получить все критерии для работы, и если критерии пусты в соответствующем поиске, то он игнорирует критерии, позволяющие копировать и вставлять любое значение в этой ячейке. Я думал, что добавление Если инструкции Else для всех критериев выполняли эту работу, но я не совсем уверен, как правильно добавить If Else statement в VBA для всех строк и сказать ей игнорировать критерии, если они пусты.
- excel formula: return true, если ни одна из ячеек в диапазоне не заполнена
- Как справиться с более чем 100 заявлениями IF
- Поиск даты в диапазоне дат в excel
- Есть ли более эффективный метод For-Next, включающий оператор If-Then?
- VBA Если инструкция и цикл цикла перемещаются в ячейку ниже
Sub search_and_extract_multicriteria() Dim datasheet As Worksheet 'where is the data copied from Dim reportsheet As Worksheet 'where is the data pasted to Dim country As String Dim SubType As String Dim ProductName As String Dim ProductFormula As String Dim Source As String Dim Rating As String Dim finalrow As Integer Dim i As Integer 'row counter Set datasheet = Sheet1 Set reportsheet = Sheet3 country = reportsheet.Range("A3").Value SubType = reportsheet.Range("C3").Value ProductName = reportsheet.Range("D3").Value ProductFormula = reportsheet.Range("E3").Value Source = reportsheet.Range("F3").Value Rating = reportsheet.Range("G3").Value reportsheet.Range("A16:K500").ClearContents datasheet.Select 'finalrow = Cells(Row.Count, 1).End(x1Up).Row For i = 2 To 500 'finalrow If Cells(i, 1) = country And Cells(i, 3) = SubType And Cells(i, 4) = ProductName And Cells(i, 5) = ProductFormula And Cells(i, 6) = Source And Cells(i, 2) = TestimonialType And Cells(i, 9) = Rating Then Range(Cells(i, 1), Cells(i, 11)).Copy 'copy columns 1 to 11 (A to K) reportsheet.Select Range("A200").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats datasheet.Select End If Next i reportsheet.Select 'this is so that the report sheet is selected when the procedure ends End Sub
- VBA Loop для условного формата, показывающий ошибку несоответствия типа
- Excel: 3 Проблема условий
- Функция Excel ISNUMBER с заявлением IF
- VBA Macro для удаления строки, если ячейки в B, C, D, E, F & G all = "0"
- Удаление противоположностей из Excel
- используя формулу поиска в excel
- Считать список в пакетах
- # N / A Ошибка при использовании MATCH через несколько листов
Вместо цикла, как только использовать встроенный метод AutoFilter
после проверки того, что переменная заполняется фактическим значением.
With datasheet.Range(.Range("A1"), .Cells(500, 11)) If Len(country) Then .AutoFilter 1, country If Len(TestimonialType) Then .AutoFilter 2, TestimonialType If Len(SubType) Then .AutoFilter 3, SubType If Len(ProductName) Then .AutoFilter 4, ProductName If Len(ProductFormula) Then .AutoFilter 5, ProductFormula If Len(Source) Then .AutoFilter 6, Source If Len(Rating) Then .AutoFilter 9, Rating .Offset(1).SpecialCells(xlCellTypeVisible).Copy 'offset 1 to remove header row reportsheet.Range("A200").End(xlUp).Offset(1).PasteSpecial xlPasteValuesAndNumberFormats .AutoFilter 'reset filter End With