скопировать и вставить данные на другой лист с l oop и при условии - PullRequest
0 голосов
/ 07 февраля 2020

Следующий код работает нормально, но на нужную страницу ничего не было скопировано

Sub a2()


Sheets.Add.Name = "25 degree"
Sheets("25 degree").Move after:=Sheets("data")


Dim x As Long

For x = 2 To 33281

If Cells(x, 1).Value = 25 Then

    Cells("x,1:x,2:x,3:x,4:x,5:x,6").Copy
     Worksheets("25 degree").Select
     ActiveSheet.Paste

End If

Next x

End Sub

1 Ответ

0 голосов
/ 07 февраля 2020

Я настоятельно рекомендую не использовать .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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...