excel - 使用偏移值复制/粘贴循环
问题描述
我们的大部分订单都通过我们的原始包装团队,他们使用这种合并格式来包装每个客户的订单。
一个新团队要求每个项目位于单独的一行,因此每个销售订单需要五行,一个用于我们销售的每种类型的小部件。他们需要它看起来像这样:
我记录了复制/粘贴命令的宏来记录第一个订单:
Sub GrabOrders()
'
' GrabOrders Macro
'
'
Sheets("Raw Data").Select
Range("B2").Select
Selection.Copy
Sheets("Ship Sheet").Select
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("A2:A6"), Type:=xlFillDefault
Range("A2:A6").Select
Sheets("Raw Data").Select
Range("F1:J1").Select
Selection.Copy
Sheets("Ship Sheet").Select
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Raw Data").Select
Range("F2:J2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Ship Sheet").Select
Range("H2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
我现在需要要复制的单元格(在原始格式选项卡上)向下移动一行到下一个订单,并在新格式选项卡上粘贴以开始向下五行,以免覆盖前一个数据命令。
项目名称将保持固定(在原始选项卡上的 F1、G1 等),而其他要复制的单元格将移动。我需要这个循环,直到它到达一个空白的销售订单单元格。
解决方案
您应该首先删除代码中的所有选择语句。
Range("B2").Select
Selection.Copy
可以简化为
Sheets("Raw Data").Range("B2").Copy
当您编写循环时,您需要从定义数据所在的范围开始。当您阅读有关避免选择语句的内容时,您将了解有关如何执行此操作的更多信息。您将想要定义您从中提取的数据的范围并避免重写您的代码,我将在循环中定义另一个最后一行,以说明您选择使用的自动填充命令。
我相信以下内容适用于您想要实现的目标,但您应该尝试返回并删除选择语句。
Sub GrabOrders()
Dim lrdata As Long
lrdata = Sheets("Raw Data").Range("A" & Rows.Count).End(xlUp).Row ' choose whichever column contains the last row of your data here
Dim i As Long
For i = 2 To lrdata ' for 2 to the number of rows in our data
Dim lastrow2 As Long
lastrow2 = Sheets("Ship Sheet").Range("a" & Rows.Count).End(xlUp).Row + 1 ' get the last row in your ship sheet then add one to avoid copying over your data
' from here, every instace of "2" you are going to change it to " & i "
Sheets("Raw Data").Select
Sheets("Raw Data").Range("B" & i).Select
Selection.Copy
Sheets("Ship Sheet").Select
Sheets("Ship Sheet").Range("A" & lastrow2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("A" & lastrow2, "A" & lastrow2 + 4), Type:=xlFillDefault ' plus five to your last row since there are only 5 colors you need to get data for
Sheets("Raw Data").Select
Range("F1:J1").Select
Selection.Copy
Sheets("Ship Sheet").Select
Range("G" & lastrow2).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Raw Data").Select
Sheets("Raw Data").Range("F" & i, "J" & i).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Ship Sheet").Select
Sheets("Ship Sheet").Range("H" & lastrow2).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Next i
End Sub
推荐阅读
- pyspark - 如何使用 pyspark 在 Amazon EMR 中跟踪长期作业的进度?
- migration - 我将数据导出到通用消息传递的尝试创建了太多打开的连接并且服务器因 OutOfMemoryError 异常而关闭
- c# - 使用 Json.NET,如何在序列化对象时加密任何类型的选定属性?
- c++ - SFML 和 Box2D 坐标同步
- google-chrome - 为什么 XHR 在 Google Chrome DevTools 中显示 js 加载请求
- javascript - 在 redux reducer 中破坏默认状态
- java - 为什么 Java 正在寻找 java.lang.NoClassDefFoundError: com/mongodb/client/MongoClients?
- unix - 在文件 foo 中,如何使用 grep 定位并打印包含 printf 的所有行,但不包括 sprintf 和 fprintf,但在行尾的任何位置?
- c# - Oracle View 上的 EF Core 查询非常慢
- python - 四元数衍生的旋转矩阵问题