如何将行从一个Excel工作表剪切/粘贴到另一工作表的第一空白行

时间:2019-05-23 14:34:09

标签: excel vba

我需要将Sheet1中E列中具有单词“ Done”的任何行剪切并粘贴到Sheet2的下一个空行中。我的问题是我不知道如何在Sheet2中找到下一个空行,并开始将值粘贴到该下一个空行。

这是一个包含两张工作表的基本工作簿。 Sheet1具有所有员工任务,Sheet2仅显示“完成”的任务。每当员工完成任务并在Sheet1的E列中的单元格中键入“完成”时,都需要剪切整行并将其粘贴到Sheet2的下一个空行中。我在Sheet1中使用以下代码创建了ActiveX Command按钮。代码会在Sheet1中找到任何显示为“完成”的单元格,并将其剪切/粘贴到Sheet2中,但是它总是从Sheet2的开头开始粘贴,我需要它从Sheet2的下一个空行开始粘贴。

Private Sub CommandButton1_Click()
Dim c As Range
Dim j As Integer
Dim Source As Worksheet
Dim Target As Worksheet

' Change worksheet designations as needed
Set Source = ActiveWorkbook.Worksheets("Sheet1")
Set Target = ActiveWorkbook.Worksheets("Sheet2")

j = 1     ' Start copying to row 1 in target sheet
For Each c In Source.Range("E1:E1000")   ' Do 1000 rows
    If c = "Done" Then
       Source.Rows(c.Row).Cut Target.Rows(j)
       j = j + 1
    End If
Next c
End Sub

我的问题是,它会继续覆盖Sheet2中已经存在的所有内容,因为我不知道用什么替换“ j”变量代码。我需要它来在Sheet2中找到下一个空行并从那里开始粘贴。

1 个答案:

答案 0 :(得分:0)

尝试一下:

Private Sub CommandButton1_Click()
Dim Source As Worksheet
Dim Target As Worksheet

Dim lRowSrc As Long, lRowDst As Long, lColSrc As Long, R As Long

' Change worksheet designations as needed
Set Source = ActiveWorkbook.Worksheets("Sheet1")
Set Target = ActiveWorkbook.Worksheets("Sheet2")

With Source
    lRowSrc = .Cells(.Rows.Count, 1).End(xlUp).row
    lColSrc = .Cells(1, .Columns.Count).End(xlToLeft).Column

    For R = lRowSrc To 1 Step -1
        If .Cells(R, 5) = "Done" Then
            lRowDst = Target.Cells(Target.Rows.Count, 1).End(xlUp).row

            Target.Range(Target.Cells(lRowDst + 1, 1), Target.Cells(lRowDst + 1, lColSrc)).Value = .Range(.Cells(R, 1), .Cells(R, lColSrc)).Value
            .Cells(R, 5).EntireRow.Delete   'get rid of the row
        End If
    Next R
End With

End Sub

请记住,对于大型数据集,此方法并不理想,而使用数组要好得多。但是,如果您只有少量的行(假设...),那应该没问题。

编辑:使用最后一行变量而不是当前行来复制值。固定。