excel - VBA 将符合条件的数据拆分为另一个 Excel 文件中的 2 个工作表
问题描述
工作簿 1中已填满 H、I、J 或 K 列的行已准备好传输。
我想将准备好传输的行复制并粘贴到Workbook 2中的 2 个现有工作表(Alex 和 IMHD)中。
Workbook 2中的每个工作表都需要从Workbook 1复制不同的信息。我已经找出了 2 组不同的复制和粘贴代码。
但是,我找不到可以拆分数据的代码,这样一半执行第一个复制和粘贴代码(CopytoAlex),而另一半执行另一个复制和粘贴代码(CopytoIM)。
注意:请随时做出任何澄清。我已经尽力解释了。
Public Function CouriersTemplate()
Workbooks("Workbook 2.xlsb").Activate
Dim sourceColumn As Range, targetColumn As Range
Dim i As Integer, endrow As Integer, WB As Integer, RB As Integer, FI As Integer, CA As Integer, alexCounter As Integer, IMCounter As Integer
Dim alexDate As Date, deliveryDate As Date
Dim order As String
Application.ScreenUpdating = False
alexDate = courierDate("ALEX")
endrow = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(Rows.Count, 1).End(xlUp).Row
alexCounter = Workbooks("Workbook 2.xlsb").Worksheets("ALEX").Cells(Rows.Count, 2).End(xlUp).Row + 1
IMCounter = Workbooks("Workbook 2.xlsb").Worksheets("IMHD").Cells(Rows.Count, 2).End(xlUp).Row + 1
For i = endrow To 4 Step -1
WB = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 8)
RB = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 9)
FI = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 10)
CA = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 11)
'Get delivery date
deliveryDate = CDate(Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 6).Value)
If (RB >= 1 Or WB >= 1 Or FI >= 1 Or CA >= 1) And deliveryDate = alexDate Then
Call CopytoAlex(i, alexCounter, order)
alexCounter = alexCounter + 1
Next (RB >= 1 Or WB >= 1 Or FI >= 1 Or CA >= 1) And deliveryDate = alexDate Then
Call CopytoIM(i, IMCounter, order)
IMCounter = IMCounter + 1
End If
Next i
End Function
解决方案
这段代码可以改进很多东西,但我只是要回答直接的问题,即如何交替输出工作表。我会尽量保留你在这里的大部分东西。
我希望你再声明一个整数变量,我们称之为 AlexOrIM。在开始循环之前将其设置为零,for i = endrow To 4 Step -1
.
现在让我们重写那个循环:
For i = endrow To 4 Step -1
WB = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 8)
RB = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 9)
FI = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 10)
CA = Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 11)
'Get delivery date
deliveryDate = CDate(Workbooks("Workbook 1.xlsb").Worksheets("Masterlist").Cells(i, 6).Value)
If (RB >= 1 Or WB >= 1 Or FI >= 1 Or CA >= 1) And deliveryDate = alexDate Then
If (AlexOrIM mod 2) = 0 Then
Call CopytoAlex(i, alexCounter, order)
alexCounter = alexCounter + 1
Else
Call CopytoIM(i, IMCounter, order)
IMCounter = IMCounter + 1
End If
AlexOrIM=AlexOrIM + 1
END IF
Next i
测试 AlexOrIM 变量的偶数值(写入 alex)或奇数值(写入 IM)然后递增,以便下次通过它写入另一张表。
推荐阅读
- python - pandas DataFrame groupby 就地填充
- c++ - OpenBLAS 只为一个例程设置线程数
- javascript - 使用(Javascript)动态切换到不同的firebase项目应用程序
- python - 熊猫:尝试为数据框列表连续编辑数据
- neo4j - 如何使用可变长度关系和每个级别的过滤器查询 Neo4j N 级别的深度
- angular - Angular 8 和材料缺失
- laravel - 路由参数和对象属性值相同,但不相等
- sql - 将产品从多条记录的订单数据返回到列
- google-app-maker - 使用“或”在 appmaker 中构建查询
- javascript - 为什么 document.body.addEventListener 事件在 document.addEventListener 之前运行?