2016-05-10 66 views
0

我有以下问题。我想从工作表中复制包含值的整个列,并将其粘贴到另一个工作表。我有下面的代码这样做,复制和粘贴多列

with copySheet.Range("A2:A400") 
pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).resize(.rows.count, .columns.count) = .value 
end with 

在这里,我复制列A值,直到第400行,我想这是可变的,所以我想复制,直到该列中的最终值,并将其粘贴到列B.

此外,如果我想复制列B并将其粘贴到C列,并使用与上面所写的代码相同的代码与B和C值进行交换,如下所示;

with copySheet.Range("B2:B400") 
pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).resize(.rows.count, .columns.count) = .value 
end with 

此代码在使用了上面的第一个之后,不会将列粘贴到列A.有谁知道如何解决这个问题?

回答

0

创建一个变量来捕获所需复制列中的最后一行数据,然后在您的With语句中使用该变量。

Sub test() 

Dim copySheet As Worksheet 
Dim pasteSheet As Worksheet 
Dim lRow As Long 

Set copySheet = Sheets("copySheet") 
Set pasteSheet = Sheets("pasteSheet") 

'Determine last row of Column A in copySheet 
lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

With copySheet.Range("A2:A" & lRow) 
pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

'Determine last row of Column B in copySheet 
lRow = copySheet.Cells(copySheet.Rows.Count, 2).End(xlUp).Row 

With copySheet.Range("B2:B" & lRow) 
pasteSheet.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

End Sub 

然后,您可以采取这一步,分配Long变量来解释你需要多少列复制,并添加For循环都要经过每一个。

出于好奇,为什么不复制整张纸,然后在pasteSheet上的列A前插入一个新列?

0

也许你可以试试这个吗?这是一个有点蛮力....第二个问题,你可以改变B和C

Columns("A").Select 
Selection.copy 
Range("B1").Select 
ActiveSheet.Paste 
Range("A1").Select 
Application.CutCopyMode = False