具有偏移值的复制/粘贴循环

问题描述 投票:1回答:1

我们的大多数订单都通过原始包装团队处理,他们使用此合并格式为每个客户包装订单。enter image description here

一个新团队需要将每个项目放在单独的行上,因此每个销售订单都需要五行,对于我们出售的每种类型的小部件,每一行。他们需要它看起来像这样:enter image description here

我记录了复制/粘贴命令的宏以记录第一顺序:

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等中),而其他要复制的单元格将移动。我需要循环直到它到达空白的销售订单单元格。

excel vba loops copy paste
1个回答
0
投票

您应先删除代码中的所有select语句。

   Range("B2").Select
   Selection.Copy

可以简化为

Sheets("Raw Data").Range("B2").Copy 

编写循环时,首先需要定义数据将位于的范围。当您阅读有关避免选择语句的知识时,您将学到更多有关如何执行此操作的信息。您将要定义从中提取数据的范围,并避免重写代码,我将在循环中定义另一行以说明您选择使用的自动填充命令。

下面的内容我相信可以满足您要实现的目标,但是您应该尝试返回并删除select语句。

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
© www.soinside.com 2019 - 2024. All rights reserved.