首页 文章

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

提问于
浏览
1

我有一个包含多张纸的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

非常感谢,如果有人可以帮助我 .

2 回答

  • 0

    假设您的问题中只显示了两列 . 这应该工作 .

    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
    
  • 0

    我在Excel VBA的初级水平,因此有兴趣尝试在论坛中建议的各种代码片段 . 我只想发表评论,但没有必要的评论点 . 我把我的观点作为答案 .

    在尝试代码@DiegoAndresJAY时,C列值与A列和B列中的值不对齐 . 次要调整以下行会给出正确的对齐方式 . 也许是一种疏忽 .

    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
    

    谢谢

相关问题