如何将整列复制到从某一行开始的另一列

我目前正在做一个macros将整个列从一个工作表复制到另一个工作表中第2行开始的另一列。 然而,我不认为它的工作, Set des = Sheets(3).Range("P2:P" & Rows(i))这是线路导致错误。

 Sub Sample() Dim lastRow As Long, i As Long Dim CopyRange As Range Dim rw As Range Dim rw1 As Range Dim rw2 As Range Dim rw3 As Range Dim des As Range Dim des1 As Range Dim des2 As Range Dim des3 As Range '~~> Change Sheet1 to relevant sheet name With Sheets(1) lastRow = .Range("A" & .Rows.Count).End(xlUp).row For i = 2 To lastRow If Len(Trim(.Range("A" & i).Value)) <> 0 Then If CopyRange Is Nothing Then Set CopyRange = .Rows(i) Else Set CopyRange = Union(CopyRange, .Rows(i)) Set rw = .Columns(16) Set rw1 = .Columns(23) Set rw2 = .Columns(3) Set rw3 = .Columns(18) End If End If Next If Not CopyRange Is Nothing Then Set des = Sheets(3).Range("P2:P" & Rows(i)) Set des1 = Sheets(3).Columns("R") Set des2 = Sheets(3).Columns("T") Set des3 = Sheets(3).Columns("U") '~~> Change Sheet2 to relevant sheet name rw.Copy des rw1.Copy des1 rw2.Copy des2 rw3.Copy des3 Application.CutCopyMode = False End If End With End Sub 

您需要将复制的列更改为范围以正确粘贴,如下所示:

 Sheets(1).Range("A1:A" & Sheets(1).Cells(Sheets(1).Rows.Count, "a").End(xlUp).Row).Copy ' this code copies from first to last cell with data in column A 

那么以后你需要粘贴他们与例如

 sheets(3).range("R2").paste 

对不起,我没有足够的post直接评论KKowalczyk的答案。

因为你循环所有的For循环,因此在你设置des范围的时候,i = lastrow + 1。ds范围将从P2到P-(lastrow + 1)

同时,从A2到A-lastrow的rw范围。

所以2范围的大小是不同的。 您应该将代码更改为:

 Set des = Sheets(3).Range("P2:P" & Rows(i-1))