Excel 将不符合条件的行从一张图纸复制到另一张图纸

Excel 将不符合条件的行从一张图纸复制到另一张图纸,excel,vba,Excel,Vba,我的VBA将所有行(不包括标题)从一个工作表复制到另一个工作表上的下一个空行 Sub Copy_Paste_Below_Last_Cell() Dim copy_from As Range Dim copy_to As Range Set copy_from = Worksheets("Shipping Data").UsedRange.Offset(1, 0) Set copy_to = Worksheets("Parts shipped YTD").Range("A" & Row

我的VBA将所有行(不包括标题)从一个工作表复制到另一个工作表上的下一个空行

Sub Copy_Paste_Below_Last_Cell()

Dim copy_from As Range
Dim copy_to As Range

Set copy_from = Worksheets("Shipping Data").UsedRange.Offset(1, 0)
Set copy_to = Worksheets("Parts shipped YTD").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

copy_from.Copy Destination:=copy_to
Application.CutCopyMode = False

End Sub

我只想将R列中没有“not Shipped”的行复制到第二个工作表中。然后,我想删除原始工作表中的行,只留下“未发货”的行。

在此,使用
自动筛选
示例:

Sub Copy_Paste_Below_Last_Cell()

'Get all variables ready first
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Worksheets("Shipping Data")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Worksheets("Parts shipped YTD")
Dim lr1 As Long: lr1 = ws1.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
Dim lr2 As Long: lr2 = ws2.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
Dim lc As Long: lc = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column
Dim rng As Range: Set rng = ws1.Range(ws1.Cells(1, 1), ws1.Cells(lr1, lc))

'Apply test before AutoFilter
If WorksheetFunction.CountIf(rng.Columns(18), "<>Not Shipped") > 1 Then

    'Apply filter and copy visible rows
    rng.AutoFilter 18, "<>Not Shipped"
    rng.Offset(1).Resize(lr1 - 1, lc).SpecialCells(12).Copy ws2.Cells(lr2, 1)
    rng.Offset(1).Resize(lr1 - 1, lc).SpecialCells(12).Rows.EntireRow.Delete
    rng.AutoFilter

End If

End Sub
Sub-Copy\u-Paste\u在最后一个单元格下方()
'首先准备好所有变量
将ws1设置为工作表:设置ws1=ThisWorkbook.Worksheets(“装运数据”)
将ws2标注为工作表:设置ws2=ThisWorkbook.Worksheets(“年初至今已发货的零件”)
将lr1的长度调整为:lr1=ws1.Cells.Find(内容:=“*”,搜索方向:=xlPrevious,搜索顺序:=xlByRows)。行
将lr2的长度调整为:lr2=ws2.Cells.Find(内容:=“*”,搜索方向:=xlPrevious,搜索顺序:=xlByRows)。行
按长度调整lc:lc=ws1.Cells(1,ws1.Columns.Count).End(xlToLeft.Column)
Dim rng As Range:设置rng=ws1.Range(ws1.Cells(1,1),ws1.Cells(lr1,lc))
'在自动筛选之前应用测试
如果工作表function.CountIf(rng.Columns(18),“未发货”)>1,则
'应用筛选器并复制可见行
rng.AutoFilter 18,“未装运”
rng.Offset(1).调整大小(lr1-1,lc).SpecialCells(12).复制ws2.Cells(lr2,1)
rng.Offset(1).调整大小(lr1-1,lc).特殊单元格(12).Rows.EntireRow.Delete
自动过滤器
如果结束
端接头

您不需要应用自动筛选吗?你想举个简单的例子吗?是的,自动筛选的例子似乎都是围绕筛选一个单词而不是排除它。干杯,谢谢你。它可以正常工作,但会覆盖粘贴到的工作表上的最后一行,而不是下一个空行。Delete函数还引发运行时错误“1004”:Range类的Delete方法失败。