简体   繁体   English

将行复制到另一张纸的下一个空行

[英]Copy row to next empty row of another sheet

I'm trying to copy rows into a new sheet based on several criteria. 我正在尝试根据几个条件将行复制到新表中。

I managed to write a macro that can find a row and copy it to a new sheet but unfortunately I'm overwriting the previous entries. 我设法编写了一个宏,该宏可以找到一行并将其复制到新表中,但是不幸的是,我覆盖了以前的条目。

There are some Solutions to this on stackoverflow - I searched for things like "copy rows into a new sheet in empty row" etc. - but I just couldn't make them work by just copying some of the code in these answers (without a proper understanding of the code). 在stackoverflow上有一些解决方案-我搜索了诸如“将行复制到空行中的新表中”之类的内容-但我只是通过复制这些答案中的一些代码而无法使它们工作(没有正确理解代码)。

How do I copy the results to the next empty row in the new sheet? 如何将结果复制到新表中的下一个空行?

Sub FilterAndCopy()

Dim lastRow As Long
Dim criterion As String
Dim team1 As String
Dim team2 As String
Dim team3 As String

criterion = "done"
team1 = "source"
team2 = "refine"
team3 = "supply"


Sheets("Sheet3").UsedRange.Offset(0).ClearContents

With Worksheets("Actions")
    .range("$A:$F").AutoFilter
    'filter for actions that are not "done"
    .range("$A:$F").AutoFilter field:=3, Criteria1:="<>" & criterion
    'filter for actions where "due date" is in the past
    .range("$A:$F").AutoFilter field:=6, Criteria1:="<" & CLng(Date)

    'FIRST TEAM
    .range("$A:$F").AutoFilter field:=4, Criteria1:="=" & team1
    'iff overdue actions exist, copy them into "Sheet3"
    lastRow = .range("A" & .rows.Count).End(xlUp).row
    If (lastRow > 1) Then
        .range("A1:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _
            Destination:=Sheets("Sheet3").range("A1")
    End If

    'SECOND TEAM
    .range("$A:$F").AutoFilter field:=4, Criteria1:="=" & team2
    'iff overdue items exist, copy them into "Sheet3"
    lastRow = .range("A" & .rows.Count).End(xlUp).row
    If (lastRow > 1) Then
        'find last row with content and copy relevant rows
        .range("A1:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _
            Destination:=Sheets("Sheet3").range("A1")
    End If

    'THIRD STREAM
    .range("$A:$F").AutoFilter field:=4, Criteria1:="=" & team3
    'iff overdue items exist, copy them into "Sheet3"
    lastRow = .range("A" & .rows.Count).End(xlUp).row
    If (lastRow > 1) Then
        'find last row with content and copy relevant rows
        .range("A1:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _
            Destination:=Sheets("Sheet3").range("A1")
    End If

End With
End Sub

You simply need to use your LastRow Code again in the new sheet. 您只需要在新表中再次使用LastRow代码。

so try 所以尝试

If (lastRow > 1) Then
    LastRow2 = worksheets("Sheet3").range("A" & rows.count).end(xlup).row + 1
    'find last row with content and copy relevant rows
    .range("A1:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _
        Destination:=Sheets("Sheet3").range("A" & LastRow2)
End If

This finds the last used row of your sheet 3 and will paste it below it. 这会找到工作表3的最后使用的行,并将其粘贴到它下面。

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM