在excel vba的第一个空列中复制粘贴范围

我想复制工作表3的单元格区域(C1:Z1000),并将其粘贴到工作表1的第一个空列(在行1中)。 下面的代码块在最后一行:source.Range(“C1:Z1000”)。复制destination.Cells(1,emptyColumn)

Sub CopyRange() Dim source As Worksheet Dim destination As Worksheet Dim emptyColumn As Long Set source = Sheets("Sheet3") Set destination = Sheets("Sheet1") 'find empty Column (actually cell in Row 1)' emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlUp).Column If emptyColumn > 1 Then emptyColumn = emptyColumn + 1 End If source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn) End Sub 

正如其他人所build议的,我认为你的问题就是你获得emptyColumn值的方式。 这适用于我:

 Sub CopyRange() Dim source As Worksheet Dim destination As Worksheet Dim emptyColumn As Long Set source = Sheets("Sheet3") Set destination = Sheets("Sheet1") 'find empty Column (actually cell in Row 1)' emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlToLeft).Column If emptyColumn > 1 Then emptyColumn = emptyColumn + 1 End If source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn) End Sub 

你现在拥有它的方式将会拉到工作表的最后一列,当粘贴时它似乎会引发错误。 上述方法将拉第一个空列。 也就是说,如果C列是空的, emptyColumn的值将是3

你有没有尝试通过你的代码?

如果你这样做,你会注意到下面这行总是将emptyColumnsvariables设置到最右边的列,而不pipe使用哪个列:

 emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlUp).Column 

通过添加1并粘贴,您可以尝试粘贴到不存在的列。 每次都会给你一个错误。

相反,请尝试以下find最后使用的列。 它从第一行的最右边一列进行search,并向左(如inputCTRL + LEFT ),以查找最后使用的列:

 emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlToLeft).Column 

然后你可以添加1并粘贴。

尝试这个:

 emptyColumn = destination.Cells(1, destination.Columns.Count).End(xltoright).Column source.Range("C1:Z1000").Copy Destination:= Cells(1, emptyColumn) 

命名参数后跟一个冒号equals :=

您的End的代码应该是: End(xlToRight)

另一种select是:

 source.Range("C1:Z1000").Copy with destination .cells(1,emptycolumn).select .paste end with 

我希望有帮助

菲利普

我发现这个post,修改它以适应我的需要。 将粘贴转置

 Sub Transpose_PasteModified() Dim source As Worksheet Dim destination As Worksheet Dim emptyColumn As Long Set source = Sheets("Sheet1") Set destination = Sheets("Sheet2") 'Data Source source.Range("A3:C3").Copy 'Gets Empty Column emptyColumn = destination.Cells(3, destination.Columns.Count).End(xlToLeft).Column 'In order to avoid issues of first row returning 1 'in this case #3 is the row so we're checking A3 'If row changes then change A3 to correct row If IsEmpty(destination.Range("A3")) Then destination.Cells(3, 1).PasteSpecial Transpose:=True Else emptyColumn = emptyColumn + 1 destination.Cells(3, emptyColumn).PasteSpecial Transpose:=True End If End Sub