将行复制到新工作表VBA

use*_*160 4 excel vba excel-vba

我正在尝试编写一个脚本,如果Sheet 1的第一列的值大于或等于10,则将一行从Sheet 1复制到Sheet 2.

Sub Macro1()

Cells(1, 1).Select
For i = 1 To ActiveCell.SpecialCells(xlLastCell).Row

    Cells(i, 1).Select

    If ActiveCell.Value >= 10 Then
        Rows(ActiveCell.Row).Select

        Rows(i & ":").Select
        Selection.Copy

        Sheets("Sheet2").Select
        ActiveSheet.Paste

        Sheets("Sheet1").Select

     End If

Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

aev*_*nko 6

这与第一个答案类似,但有一些差异.这里有一些注意事项:

  • 使用for-each循环遍历一个范围(它没有使用变量数组那么快,但保持简单并提供比for循环更快的速度.
  • 您可能需要在值检查之前添加"If IsNumeric(cell)"检查.
  • 不要使用select - 你不需要,它浪费资源.
  • 最好使用A中使用的最后一个单元格然后使用的范围.

这是代码:

Sub CopyRows()

Dim cell As Range
Dim lastRow As Long, i As Long

lastRow = Range("A" & Rows.Count).End(xlUp).Row
i = 1

For Each cell In Sheets(1).Range("A1:A" & lastRow)
    If cell.Value >= 10 Then
        cell.EntireRow.Copy Sheets(2).Cells(i, 1)
        i = i + 1
    End If
Next

End Sub
Run Code Online (Sandbox Code Playgroud)