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

时间:2013-03-18 09:00:46

标签: excel vba excel-vba copy-paste

我想复制工作表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

4 个答案:

答案 0 :(得分:2)

我认为您的问题是您获得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

答案 1 :(得分:1)

您是否尝试过单步执行代码?

如果这样做,您会注意到以下行始终将emptyColumns变量设置为最右侧列,无论使用哪些列:

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

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

相反,请尝试以下操作以查找上次使用的列。它从第一行的最右列开始搜索并向左移动(例如键入 CTRL + LEFT ),以查找上次使用的列:

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

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

答案 2 :(得分:0)

试试这个:

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

source.Range("C1:Z1000").Copy Destination:= Cells(1, emptyColumn)

命名参数后面跟冒号等于:=

您的End代码应为: 结束(xlToRight)

另一种选择是:

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

我希望有帮助

菲利普

答案 3 :(得分:0)

我发现这篇文章,修改它以满足我的需要。将粘贴转置

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