在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
你有没有尝试通过你的代码?
如果你这样做,你会注意到下面这行总是将emptyColumns
variables设置到最右边的列,而不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