将多个sheet的列数据复制到同一列中的一个sheet,不覆盖
Copy column data from multiple sheets to one sheet in the same column, no overwriting
我有三个数据摘录:
- 发票
- CreditNotes
- 期刊
我创建了一个 Excel 工作簿,该工作簿在三个单独的选项卡中包含此数据。每个选项卡有超过 50 列。
我想做的是创建一个 'master' 选项卡,将这三个选项卡中的每一个的三列数据复制到一个合并的工作中sheet,即列:
- 账户代码
- 单位数量
- 日期
我知道如何使用 VBA 将整个列从一个 sheet 复制到另一个,我只是不知道如何将另一列的数据复制到 '主选项卡,即不覆盖数据,例如:
我可以将帐户代码数据从 'Invoices' 选项卡复制到 'master' 选项卡,但是当我从 'CreditNotes' 选项卡复制帐户代码数据时,它会覆盖我已经从“发票”选项卡中复制的内容,而我希望将其复制到下方。
对不起,文字墙,我只是想提供尽可能多的信息!
我的代码是:
Sub Consolidation()
Sheets("Invoices").Columns(11).Copy Destination:=Sheets("master").Columns(1)
Sheets("CreditNotes").Columns(11).Copy Destination:=Sheets("master").Columns(1)
Sheets("Journals").Columns(11).Copy Destination:=Sheets("master").Columns(1)
End Sub
合并列
Sub ConsolidateColumn()
' Source Worksheet List
Const cSheets As String = "Invoices,CreditNotes,Journals"
Const cTarget As String = "Sheet1" ' Target Worksheet Name
Const cFur As Long = 2 ' Source First Used Row
Const cColS As Variant = 11 ' Source Column Letter/Number ("K")
Const cColT As Variant = 1 ' Target Column Letter/Number ("A")
Dim rng As Range ' Source Column Range (in current Source Worksheet)
Dim vntW As Variant ' Worksheet Array
Dim LurS As Long ' Source Last Used Row Number
Dim FerT As Long ' Target First Empty Row Number
Dim i As Long ' Worksheet Array Element Counter
' Split Source Worksheet List to Worksheet Array.
vntW = Split(cSheets, ",")
' In This Workbook (The Workbook Containing This Code)
With ThisWorkbook.Worksheets(cTarget)
' Loop through elements of Worksheet Array.
For i = 0 To UBound(vntW)
' Calculate Target First Empty Row Number.
FerT = .Cells(.Rows.Count, cColT).End(xlUp).Row + 1
' In Current Source Worksheet
With ThisWorkbook.Worksheets(Trim(vntW(i)))
' Calculate Source Last Used Row Number.
LurS = .Cells(.Rows.Count, cColS).End(xlUp).Row
' Calculate Source Column Range.
' Create a reference to Source Column Range.
Set rng = .Cells(cFur, cColS).Resize(LurS - cFur + 1)
End With
' Calculate Target Column Range.
' Copy values from current Source Column Range to Target Column
' Range.
.Cells(FerT, cColT).Resize(rng.Rows.Count) = rng.Value
Next
End With
End Sub
我有三个数据摘录:
- 发票
- CreditNotes
- 期刊
我创建了一个 Excel 工作簿,该工作簿在三个单独的选项卡中包含此数据。每个选项卡有超过 50 列。
我想做的是创建一个 'master' 选项卡,将这三个选项卡中的每一个的三列数据复制到一个合并的工作中sheet,即列:
- 账户代码
- 单位数量
- 日期
我知道如何使用 VBA 将整个列从一个 sheet 复制到另一个,我只是不知道如何将另一列的数据复制到 '主选项卡,即不覆盖数据,例如:
我可以将帐户代码数据从 'Invoices' 选项卡复制到 'master' 选项卡,但是当我从 'CreditNotes' 选项卡复制帐户代码数据时,它会覆盖我已经从“发票”选项卡中复制的内容,而我希望将其复制到下方。
对不起,文字墙,我只是想提供尽可能多的信息!
我的代码是:
Sub Consolidation()
Sheets("Invoices").Columns(11).Copy Destination:=Sheets("master").Columns(1)
Sheets("CreditNotes").Columns(11).Copy Destination:=Sheets("master").Columns(1)
Sheets("Journals").Columns(11).Copy Destination:=Sheets("master").Columns(1)
End Sub
合并列
Sub ConsolidateColumn()
' Source Worksheet List
Const cSheets As String = "Invoices,CreditNotes,Journals"
Const cTarget As String = "Sheet1" ' Target Worksheet Name
Const cFur As Long = 2 ' Source First Used Row
Const cColS As Variant = 11 ' Source Column Letter/Number ("K")
Const cColT As Variant = 1 ' Target Column Letter/Number ("A")
Dim rng As Range ' Source Column Range (in current Source Worksheet)
Dim vntW As Variant ' Worksheet Array
Dim LurS As Long ' Source Last Used Row Number
Dim FerT As Long ' Target First Empty Row Number
Dim i As Long ' Worksheet Array Element Counter
' Split Source Worksheet List to Worksheet Array.
vntW = Split(cSheets, ",")
' In This Workbook (The Workbook Containing This Code)
With ThisWorkbook.Worksheets(cTarget)
' Loop through elements of Worksheet Array.
For i = 0 To UBound(vntW)
' Calculate Target First Empty Row Number.
FerT = .Cells(.Rows.Count, cColT).End(xlUp).Row + 1
' In Current Source Worksheet
With ThisWorkbook.Worksheets(Trim(vntW(i)))
' Calculate Source Last Used Row Number.
LurS = .Cells(.Rows.Count, cColS).End(xlUp).Row
' Calculate Source Column Range.
' Create a reference to Source Column Range.
Set rng = .Cells(cFur, cColS).Resize(LurS - cFur + 1)
End With
' Calculate Target Column Range.
' Copy values from current Source Column Range to Target Column
' Range.
.Cells(FerT, cColT).Resize(rng.Rows.Count) = rng.Value
Next
End With
End Sub