Copy/paste 范围从一个工作表到另一个工作表中的下一个可用列
Copy/paste range from one worksheet to next available column in another worksheet
我正在尝试将一个工作表中的一系列数据复制到同一工作簿中的另一个工作表中。
所以在 Sheet1 中复制范围 ("A2:B10"),然后在 Sheet2 中粘贴 ("A2")。
每次宏为 运行,我希望将 ("Sheet 1").Range("A2:B10") 中的值粘贴到连续的列中,因此在第二个 运行, 在 "B2" "C2" 在 Sheet 2.
我有第一部分,但第二部分很吃力:
Sub sbCopyRangeToAnotherSheet()
'Set range
Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2")
'Copy the data
Sheets("Sheet1").Range("A2:B10").Copy
'Activate the destination worksheet
Sheets("Sheet2").Activate
'Select the target range
Range("A2").Select
'Paste in the target destination
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
你的代码很奇怪
这一行Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2")
正在一行中复制和粘贴所有内容。因此,您 .copy
.activate
.select
和 .paste
的后续行是多余的。你的第一行已经完成了所有这些。
您需要确定工作表 2 的第 "A" 行中最后使用的列。为此,您可以使用范围的 .End()
方法来查找行中第一个占用的单元格。然后将该单元格用作副本 Destination
:
Sub sbCopyRangeToAnotherSheet()
'Declare a variable to hold the cell to which we will paste the data
Dim pasteCell as Range
'Set the variable to the first empty cell in Row 2
Set pasteCell = Sheets("Sheet2").Range("IV2").end(xlToLeft).Offset(,1)
'Copy and paste
Sheets("Sheet1").Range("A2:B10").Copy Destination:=pasteCell
End Sub
无需使用 Active
和 Select
:
Option Explicit
Sub TestMe()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim source As Range
Dim target As Range
Dim lastColumn As Long
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
With ws2
lastColumn = .Cells(2, .Columns.Count).End(xlToLeft).Column
If WorksheetFunction.CountA(.Columns(1)) > 0 Then
lastColumn = lastColumn + 1
End If
End With
Set source = ws1.Range("A2:A10")
Set target = ws2.Cells(2, lastColumn)
source.Copy destination:=target
Application.CutCopyMode = False
End Sub
代码中最棘手的部分是开始在目标工作表的正确列上书写。如果工作表为空,则正确的列是第一列。在所有其他情况下,正确的列是最后一列 + 1。
查找最后使用的列的标准方法 - Range.End(xlToLeft).Column
总是 return 第一列作为最后使用的列,w/o 注意它是否被使用。因此,您需要进行某种检查,以了解它是否为空:WorksheetFunction.CountA(.Columns(1)) > 0
我正在尝试将一个工作表中的一系列数据复制到同一工作簿中的另一个工作表中。
所以在 Sheet1 中复制范围 ("A2:B10"),然后在 Sheet2 中粘贴 ("A2")。
每次宏为 运行,我希望将 ("Sheet 1").Range("A2:B10") 中的值粘贴到连续的列中,因此在第二个 运行, 在 "B2" "C2" 在 Sheet 2.
我有第一部分,但第二部分很吃力:
Sub sbCopyRangeToAnotherSheet()
'Set range
Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2")
'Copy the data
Sheets("Sheet1").Range("A2:B10").Copy
'Activate the destination worksheet
Sheets("Sheet2").Activate
'Select the target range
Range("A2").Select
'Paste in the target destination
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
你的代码很奇怪
这一行Sheets("Sheet1").Range("A2:B10").Copy Destination:=Sheets("Sheet2").Range("A2")
正在一行中复制和粘贴所有内容。因此,您 .copy
.activate
.select
和 .paste
的后续行是多余的。你的第一行已经完成了所有这些。
您需要确定工作表 2 的第 "A" 行中最后使用的列。为此,您可以使用范围的 .End()
方法来查找行中第一个占用的单元格。然后将该单元格用作副本 Destination
:
Sub sbCopyRangeToAnotherSheet()
'Declare a variable to hold the cell to which we will paste the data
Dim pasteCell as Range
'Set the variable to the first empty cell in Row 2
Set pasteCell = Sheets("Sheet2").Range("IV2").end(xlToLeft).Offset(,1)
'Copy and paste
Sheets("Sheet1").Range("A2:B10").Copy Destination:=pasteCell
End Sub
无需使用 Active
和 Select
:
Option Explicit
Sub TestMe()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim source As Range
Dim target As Range
Dim lastColumn As Long
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
With ws2
lastColumn = .Cells(2, .Columns.Count).End(xlToLeft).Column
If WorksheetFunction.CountA(.Columns(1)) > 0 Then
lastColumn = lastColumn + 1
End If
End With
Set source = ws1.Range("A2:A10")
Set target = ws2.Cells(2, lastColumn)
source.Copy destination:=target
Application.CutCopyMode = False
End Sub
代码中最棘手的部分是开始在目标工作表的正确列上书写。如果工作表为空,则正确的列是第一列。在所有其他情况下,正确的列是最后一列 + 1。
查找最后使用的列的标准方法 - Range.End(xlToLeft).Column
总是 return 第一列作为最后使用的列,w/o 注意它是否被使用。因此,您需要进行某种检查,以了解它是否为空:WorksheetFunction.CountA(.Columns(1)) > 0