Используйте lastRow переменную для определения последней строки. Я привел несколько примеров этого. Также в этом примере используется переменная lastCol. Вы можете использовать это, если число столбцов также динамическое.
Private Sub lastRow()
Dim lastRow As Long
Dim lastCol As Long
Dim sheet As String
sheet = "WS1"
lastRow = Sheets(sheet).Range("A" & Rows.Count).End(xlUp).row 'Using Range()
lastRow = Sheets(sheet).Cells(Rows.Count, "A").End(xlUp).row 'Using Cells()
lastCol = Sheets(sheet).Cells(2, Columns.Count).End(xlToLeft).Column
End Sub
Вы можете легко прокрутить свой лист, используя переменные. Использование ячеек (row, col) вместо Range (A1). вы можете использовать числа или букву в кавычках для столбца, как показано в примере.
В этом примере рассматривается WS1 и соответствует someValue. Если значение в столбце A WS1 = некоторое значение, запись копируется на лист «Мастер».
Sub LoopExample()
Dim mRow As Long 'used for a master row
For lRow = 2 To lastRow
If Sheets(sheet).Cells(lRow, 1) = someValue Then
'perform something here like this. Copy columns A:D to the Master Sheet if match
For lCol = 1 To 4 'or you could go 1 to lastCol if you needed it dynamic
Sheets("MASTER").Cells(mRow, lCol) = Sheets(sheet).Cells(lRow, lCol) 'mRow as Row on Master
Next lCol
mRow = mRow + 1 'Increment the Master Row
End If
Next lRow
End Sub
Я согласен с PJ, jus t, чтобы добавить еще один метод поиска последнего, если вы не хотите жестко кодировать определенный столбец 'lastrow = Sheet (" sheet1 "). UsedRange.Rows.Count' –
Будьте осторожны, используя' UsedRange', чтобы получить последнюю использованную строку на лист: если в (например) строке 1 нет значений, то эта строка не учитывается в 'UsedRange.Rows.Count' –