首页 > 解决方案 > 使用 VBA 将符合条件的行复制到 Excel 中的两个或多个不同工作表中

问题描述

有没有人愿意帮助一个真正自学成才的初学者(对学习这些东西充满热情)?

对于库存和订单文件,我正在寻找一种将表中匹配 1 个条件的行复制到另一张表的方法。同时,我希望将所有其他行(不符合 1 标准)复制到另一张工作表中。

我做到了可以将表 ORDERS 上的表 ORDERS 的行复制到表 INSTOCKORDERS 上的表 INSTOCKORDERS 中。但我真正想要的是从所有订单中制作两张不同的床单。一个带有已订购且有库存的物品。还有一张没有库存的订单/物品。执行此操作后,它应该清空 ORDERS 表。之后,下一次它应该将 ORDERS 放入最后一行下方的表 INSTOCKORDERS 和 NOSTOCKORDERS 中。

我对排序的意思是将所有库存数量为 0 的项目放在表的顶部,我认为这可以更容易地将所有具有 0 项目的项目复制到 NOSTOCKORDERS 并将所有其他项目复制到 INSTOCKORDERS。但是我不知道如何使这成为一个整洁的工作动作,更不用说如何开始了(对不起我的初学者无知......)我经历了一些以前的问题,遇到了 AutoFilter,但没有得到它......

Sub CopyOrders()

'Sorting column STOCK in ORDERS from a-z
    Worksheets("Orders").ListObjects("Orders").Sort. _
        SortFields.Clear
    Worksheets("Orders").ListObjects("Orders").Sort. _
        SortFields.Add2 Key:=Range("Orders[[#All],[STOCK]]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("Orders").ListObjects("Orders").Sort
        .Apply
    End With

'Copying the table ORDERS to INSTOCKORDERS
Range("Orders").Copy Range("InStockOrders")

End Sub

标签: excelvbacopyrows

解决方案


你是对的,自动过滤功能就是你想要的。自动过滤器需要一个过滤条件,然后需要被告知要在哪个列(字段)中找到条件。然后,您需要在过滤后复制剩余的可见单元格。在下面的代码中,将 Workbooks、Worksheets 和 Range 替换为您的工作簿所需的内容:

Sub FilterNoStock()
Workbooks.Worksheets.Range.AutoFilter Field=5, Criteria1:="0", VisibleDropDown:=True
Workbooks.Worksheets.Range.SpecialCells(xlCellTypeVisible).Copy
End Sub

同样,您可以过滤除 1 个值之外的所有值:

Sub FilterInStock()
Workbooks.Worksheets.Range.AutoFilter Field=5, Criteria1:="<>" & "0", VisibleDropDown:=True
Workbooks.Worksheets.Range.SpecialCells(xlCellTypeVisible).Copy
End Sub

我还建议将此与 Rows.Count 函数配对,以便能够仅动态复制包含数据的行,并将其粘贴到 InStock 和 NoStock 工作表中的列表末尾。使用 Rows.Count 方法,您可以让 VBA 计算您拥有的行数,将其设置为一个变量,然后使用该变量来声明您的范围的长度。现在您正在复制整个工作表,如果您尝试在 InStock 和 NoStock 工作表中编译多个订单,这将是一个问题,因为粘贴会覆盖之前订单中的所有数据:Rows.Count 的描述


推荐阅读