使用VBA将dynamic范围复制并粘贴到Excel中的新工作表

我是macros观写作的新手,我需要一些帮助。

我有一张纸,需要复制列和重新排列他们粘贴到一个软件程序。

  1. 我想复制A2 – 列A中的最后一个数据条目并将其粘贴到Sheet2上的A1中
  2. 我想复制B2 – 列A中的最后一个数据条目并将其粘贴到Sheet2上的K1中
  3. 我想复制C2 – 列A中的最后一个数据条目并将其粘贴到Sheet2上的C1中
  4. 我想复制D2 – 列A中的最后一个数据条目,并将其粘贴到Sheet2上的D1中
  5. 然后从表2中,我想复制A1:KXXXX(到列A中的最后一个条目)并将其保存在剪贴板上以粘贴到其他应用程序

这是我的代码,我试过…(我知道这只是复制列A,但我卡在那里。)

Sub Copy() aLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row Range("A2" & aLastRow).Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub 

非常感谢你的帮助! 枷锁

试试这个。 鉴于你说你有一个错误的粘贴代码,我仍然使用,我认为你仍然会有一个错误。 发布错误消息。 希望我们能弄清楚。

 Sub copyStuff() Dim wsIn As Worksheet Set wsIn = Application.Worksheets("Sheet1") Dim endRow As Long wsIn.Activate endRow = wsIn.Cells(wsIn.Rows.Count, "A").End(xlUp).Row Dim r As Range Dim wsOut As Worksheet Set wsOut = Application.Worksheets("Sheet2") ' column a to column a Set r = wsIn.Range(Cells(2, 1), Cells(endRow, 1)) r.Copy wsOut.Range("A1").PasteSpecial xlPasteAll ' column b to column k Set r = wsIn.Range(Cells(2, 2), Cells(endRow, 2)) r.Copy wsOut.Range("K1").PasteSpecial xlPasteAll ' column c to column c Set r = wsIn.Range(Cells(2, 3), Cells(endRow, 3)) r.Copy wsOut.Range("C1").PasteSpecial xlPasteAll ' column d to column d Set r = wsIn.Range(Cells(2, 4), Cells(endRow, 4)) r.Copy wsOut.Range("D1").PasteSpecial xlPasteAll ' Copy data from sheet 2 into clipboard wsOut.Activate Set r = wsOut.Range(Cells(1, 1), Cells(endRow - 1, 11)) r.Copy End Sub 

我原来的答案在这里。 你可以不理会

这应该完成你的第一个目标:

 Sub copyStuff() Dim wsIn As Worksheet Set wsIn = Application.Worksheets("Sheet1") Dim endRow As Long endRow = wsIn.Cells(wsIn.Rows.Count, "A").End(xlUp).Row Dim r As range Set r = wsIn.range(Cells(2, 1), Cells(endRow, 4)) r.Copy Dim wsOut As Worksheet Set wsOut = Application.Worksheets("Sheet2") wsOut.range("A1").PasteSpecial xlPasteAll End Sub 

我一次复制了所有4列,因为这会更快,但假设列是相同的长度。 如果不是这样,则需要一次复制一个。

数据应位于macros末尾的剪贴板中。

编辑:我删除了“wsIn.Activate”,因为它不是真的需要。 编辑2:哎呀! 我只是注意到你想在不同栏目的输出。 我会努力的。

一般你想避免.Select.Paste当复制值,而复制.value = .value

 Sub Copy() Dim aLastRow As Long Dim clipboard As MSForms.DataObject Set clipboard = New MSForms.DataObject aLastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row Sheets("Sheet2").Range("A1:A" & aLastRow - 1).Value = Sheets("Sheet1").Range("A2:A" & aLastRow).Value Sheets("Sheet2").Range("K1:K" & aLastRow - 1).Value = Sheets("Sheet1").Range("B2:B" & aLastRow).Value Sheets("Sheet2").Range("C1:D" & aLastRow - 1).Value = Sheets("Sheet1").Range("C2:D" & aLastRow).Value clipboard.SetText Sheets("Sheet2").Range("A1:K" & aLastRow - 1).Value clipboard.PutInClipboard End Sub