Я настоятельно рекомендую не использовать .Select
или ActiveSheet
, вместо этого укажите лист для каждого Cells()
объекта в соответствии с Как избежать использования Select в Excel VBA .
Option Explicit
Public Sub DoSomeCoypExample()
Dim wsSource As Worksheet
Set wsSource = ThisWorkbook.ActiveSheet
'better define by name
'Set wsSource = ThisWorkbook.Worksheets("source sheet")
Dim wsDestination As Worksheet
Set wsDestination = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets("data")) 'add at the correct position and set it to a variable
wsDestination.Name = "25 degree" 'so you can use the variable to access the new added worksheet.
Dim iRow As Long
For iRow = 2 To 33281 'don't use fixed end numbers (see below if you meant to loop until the last used row)
If wsSource.Cells(iRow, 1).Value = 25 Then
With wsSource
.Range(.Cells(iRow, 1), .Cells(iRow, 6)).Copy Destination:=wsDestination.Range("A1")
'this line will copy columns 1 to 6 of the current row
'note you need to specify the range where you want to paste
'if this should be dynamic see below.
End With
End If
Next iRow
End Sub
Если вы хотите l oop до последней использованной строки, вы можете получить это с помощью чего-то вроде
Dim LastRow As Long
LastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row 'last used row in column A
Если вы хотите вставить следующую свободную строку в вашем рабочем листе назначения вместо фиксированного диапазона Destination:=wsDestination.Range("A1")
вы можете использовать ту же технику, что и выше, чтобы найти следующую свободную строку:
Dim NextFreeRow As Long
NextFreeRow = wsDestination.Cells(wsDestination.Rows.Count, "A").End(xlUp).Row + 1
Таким образом, вы можете использовать это в месте назначения вставки:
Destination:=wsDestination.Range("A" & NextFreeRow)