在电子表格中垂直复制所有列

set ws1 As SheetA set ws2 As Target With ws1 LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column End With Lastrow = ws1.Range("B" & Rows.Count).End(xlUp).Row For i = 1 To Lastcol For l = 4 To lastrow ws1.Cells(l, i).Copy ws2.Range("a65536").End(xlUp).Offset(1, 0) Next l Next i 

我试图将一张纸上的所有列复制到另一张纸上。 基本上将Sheet1的列A复制到Sheet2的Column A,然后将Sheet1的Column B复制到Sheet2的Column A.

数据从每一列的A行第4行开始,所以我保留了从第4行开始的第二行。任何帮助都非常感谢,因为我现在坚持了几个小时。 当我运行代码进入无限循环。

如果每列的Lastrow都是相同的(引用B列),那么你可以尝试下面的方法:

 With ws1 LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row End With Dim i As Long, LastRow2 As Long For i = 0 To LastCol - 1 With ws2 LastRow2 = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 ws1.Range("A4:A" & LastRow).Offset(0, i).Copy .Range("A" & LastRow2) End With Next 

您不需要通过嵌套For Loop逐一复制每个单元格。
您可以设置要复制的第一组单元格( Range("A4:A" & LastRow) ),然后仅使用Offset即可使用一(1)个循环复制下一列。

如果每个列的LastRow不同,您可以尝试:

 Dim LastCol As Long, LastRow As Long LastCol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column Dim i As Long, LastRow2 As Long For i = 0 To LastCol - 1 LastRow = ws1.Cells(ws1.Rows.Count, i + 1).End(xlUp).Row With ws2 LastRow2 = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 ws1.Range("A4:A" & LastRow).Offset(0, i).Copy .Range("A" & LastRow2) End With Next