Я пытаюсь скопировать строки с одного листа на другой, основываясь на том, существует ли строка в указанной ячейке c каждой строки. В приведенном ниже примере я ищу Иорданию в столбце J. Если это имя находится в столбцах J этой конкретной строки, оно перемещается на другой лист (Финальный лист).
Sub Test()
Worksheets("All Data").Activate
Dim N As Long, i As Long
N = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To N
If InStr(1, Cells(i, "J"), "Jordan") > 0 Then
Worksheets("All Data").Rows(i).Copy
Worksheets("Final Sheet").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End If
Next i
End Sub
Что я хочу чтобы сделать, это искать несколько строк. Я могу выполнить это sh, добавив столько «И», как показано ниже.
If InStr(1, Cells(i, "J"), "Jordan") > 0 Or InStr(1, Cells(i, "J"), "Barkley") > 0 Then
У меня обычно есть 5+ строк, которые я ищу, и каждый раз становится трудно обновлять код. Я бы предпочел, чтобы строки, которые я ищу, были бы расположены в диапазоне ячеек на каком-то скрытом листе, который я или кто-то мог бы легко обновить. Я возился с нижеследующим. Диапазон действительно работает, если это одна ячейка. Если его больше, например, A1: A5, то он ломается. Любые мысли о том, как я мог сделать это? Мне не хватает элегантного решения?
Sub Test()
Worksheets("All Data").Activate
Dim N As Long, i As Long
N = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To N
If InStr(1, Cells(i, "J"), Worksheets("List").Range("A1:A5")) > 0 Then
Worksheets("All Data").Rows(i).Copy
Worksheets("Final Sheet").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End If
Next i
End Sub
List Sheet
- | A |
1 | Jordan |
2 | Barkley |
3 | Batman |
4 | Robin |
5 | Ozzy |