【发布时间】:2020-01-01 16:42:08
【问题描述】:
我目前正在使用一个工作簿,并希望实施一项准备工作,从包含在单独工作表中的工作簿中复制/粘贴所有相关范围(最多 3 个工作表)。
我有下面的代码来循环工作表,不幸的是我无法编写粘贴命令以便从同一行连续粘贴这些范围。我想要转置:= True。 I.E Rgn from sheet1 从 B2 开始,在右侧最后一个填充的单元格从 Sheet2 开始 Rgn 之后,在最后一个填充的单元格从 Sheet3 开始 Rgn 之后(前提是 Sheet3 存在 Rgn)。
目前,我的代码会覆盖从上一张表中复制的内容。
我在这里找到了一个潜在的参考 (VBA Copy Paste Values From Separate Ranges And Paste On Same Sheet, Same Row Offset Columns (Repeat For Multiple Sheets)),但我不确定如何使用地址,也不确定如何在解决方案中设置偏移量。
' Insert temporary tab
Set sh = wb.Sheets.Add(after:=wb.Sheets(wb.Sheets.Count))
sh.Name = "Prep"
'Loop
For Each sh In wb.Worksheets
Select Case sh.Index
Case 1
Sheets(1).Range("D16:D18").Copy
Case 2
lastrow = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
lastcol = Sheets(2).Cells(9, Columns.Count).End(xlToLeft).Column
Set Rng = Sheets(2).Range("M9", Sheets(2).Cells(lastrow, lastcol))
Rng.Copy
Case 3
'Check if Range (first col for answers) is not empty
If Worksheetunction.CountA(Range("L9:L24")) = 0 Then
Exit For
Else
lastrow = Sheets(3).Range("A" & Rows.Count).End(xlUp).Row
lastcol = Sheets(3).Cells(9, Columns.Count).End(xlToLeft).Column
Set Rng = Sheets(3).Range("L9", Sheets(3).Cells(lastrow, lastcol))
Rng.Copy
End If
End Select
wb.Sheets("Prep").UsedRange.Offset(1,1).PasteSpecial Paste:=xlPasteAll, Transpose:=True
Next
Set sh = Nothing
Set Rng = Nothing
【问题讨论】:
-
您想每次都将行作为列粘贴到彼此的右侧吗?
-
是的,这正是我想要的。
-
初始目标是特定的行还是列?您正在从可能是可变单元格的 usedrange 偏移。
-
初始目的地可能是 A1,但为了避免额外的编码,我宁愿从 B2 开始。这就是我插入偏移量的原因...
标签: vba range paste transpose consolidation