Excel – 用于添加列ID的VBA代码,然后将所有工作表合并到工作表中

我有一个多张纸的Excel文件。 每张纸都有相同的格式,例如:

表1:名称“01”

╔══════╦═══════╗ ║ Name ║ Value ║ ╠══════╬═══════╣ ║ a ║ 1 ║ ║ b ║ 2 ║ ╚══════╩═══════╝ 

工作表2:名称“02”

 ╔══════╦═══════╗ ║ Name ║ Value ║ ╠══════╬═══════╣ ║ c ║ 3 ║ ║ d ║ 4 ║ ╚══════╩═══════╝ 

我想将所有这些表单合并到一个新表单中,如:

表结合:名称“结合”

 ╔══════╦═══════╦════╗ ║ Name ║ Value ║ ID ║ ╠══════╬═══════╬════╣ ║ a ║ 1 ║ 01 ║ ║ b ║ 2 ║ 01 ║ ║ c ║ 3 ║ 02 ║ ║ d ║ 4 ║ 02 ║ ╚══════╩═══════╩════╝ 

我发现一个VBA代码来组合所有工作表,但是我不知道如何在组合之前为每个工作表添加一个列ID。 VBA代码是:

 Sub Combine() Dim J As Integer On Error Resume Next Sheets(1).Select Worksheets.Add Sheets(1).Name = "Combined" Sheets(2).Activate Range("A1").EntireRow.Select Selection.Copy Destination:=Sheets(1).Range("A1") For J = 2 To Sheets.Count Sheets(J).Activate Range("A1").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2) Next End Sub 

如果有人能帮助我,非常感谢。

假设只有两个列,如你在你的问题所示。 这应该工作。

 Sub Combine() Dim J As Integer On Error Resume Next Sheets(1).Select Worksheets.Add Sheets(1).Name = "Combined" Sheets(2).Activate Range("A1").EntireRow.Select Selection.Copy Destination:=Sheets(1).Range("A1") For J = 2 To Sheets.Count Sheets(J).Activate Range("A1").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2) Sheets(1).range(sheets(1).cells(Sheets(1).Range("C65536").End(xlUp).Row, 3), sheets(1).cells(Sheets(1).Range("A65536").End(xlUp).Row, 3)) = Sheets(j).name Next End Sub 

我在Excel VBA的初学者级别,因此有兴趣尝试在论坛中build议的各种代码片段。 我只想发表评论,但没有要求评论意见。所以把我的观点作为答案。

在尝试代码@DiegoAndresJAY时,C列的值与列A和列B中的值不一致。稍微调整下面一行即可得出正确的alignment方式。 也许是一个疏忽。

  Sheets(1).range(sheets(1).cells(Sheets(1).Range("C65536").End(xlUp).Row+1, 3), sheets(1).cells(Sheets(1).Range("A65536").End(xlUp).Row, 3)) = Sheets(j).name 

谢谢