Select 第一个空白行和第三个空白行之间的单元格,然后粘贴到另一个 sheet

Select cells between first blank row and third blank row, then paste into another sheet

我正在尝试制作一个子例程,选择第一个空白行和第三个空白行之间的行并将其移动(同时将其从原始 sheet 中删除)到标记为 sheet 中"Hold or Cancelled"

我有一个空白行函数,基本上是查找 E 列中的第一个空白单元格,然后选择该行。我试过用 Selection.Resize 玩箭头,但似乎无法正常工作。

Dim i1 As Long
Dim i2 As Long
Dim i3 As Long
i1 = ActiveSheet.Range("E1").End(xlDown).Offset(1).EntireRow.Select
i2 = .Range("E" & Rows.Count).End(xlUp).Row + 3
i3 = i2 - i1

ActiveSheet.Range("E1").End(xlDown).Offset(1).EntireRow.Select
Selection.Resize (i3)

我不知道如何将选择移动到另一个 sheet。

这里有两种在工作表之间移动行的方法

假设您要将 E 列中包含空单元格的行从 "Sheet1" 移动到 "Sheet2"


一次移动一行

Public Sub moveRows1()
    Dim ws1 As Worksheet, ws2 As Worksheet, xRow1 As Long, xRow2 As Long

    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    xRow1 = ws1.Range("E1").End(xlDown).Offset(1).Row       'find 1st blank cell on Sheet1
    xRow2 = ws2.UsedRange.Row + ws2.UsedRange.Rows.Count    'find 1st blank cell on Sheet2

    ws1.Rows(xRow1).Cut                     'cut entire row from Sheet1
    ws2.Rows(xRow2).Insert Shift:=xlDown    'paste it on Sheet2
    ws1.Rows(xRow1).Delete Shift:=xlUp      'remove empty row from Sheet1
    'ws1.Rows(xRow1).EntireRow.Delete       'or delete entire row
End Sub

一次所有行

Public Sub moveRows2()
    Dim ws1 As Worksheet, ws2 As Worksheet, ur1 As Range, xRow2 As Long

    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    xRow2 = ws2.UsedRange.Row + ws2.UsedRange.Rows.Count    'find 1st blank cell on Sheet2

    Set ur1 = ws1.UsedRange

    With ur1
        .AutoFilter
        .AutoFilter Field:=5, Criteria1:="="       'AutoFilter Col E (blank cells)

        'If there are any visible rows
        If ws1.Cells(ws1.Rows.Count, ur1.Column).End(xlUp).Row > ur1.Row Then

            'Copy-paste visible data from Sheet1 to Sheet2
            .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).Copy ws2.Cells(xRow2, 1)

            'Delete visible range with data from Sheet1
            .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).EntireRow.Delete

        End If
        .AutoFilter
    End With
End Sub