Excel多工作表按唯一ID合并:重复ID行插入与拆分需求
高效解决多工作表ID匹配信息拆分展示问题
方案一:Power Query(推荐,低手动、可复用)
这是Excel自带的工具,不用写复杂公式或代码,就能自动完成数据合并和拆分:
- 导入所有工作表数据
点击「数据」选项卡 → 「获取数据」→「从文件」→「从工作簿」,选中当前工作簿。在导航器里勾选除merged_sheet外的所有工作表,点击「转换数据」进入编辑器。
- 导入所有工作表数据
- 合并所有附加信息表
点击「主页」→「追加查询」→「追加多个查询」,选中所有导入的工作表,生成一个包含全部ID和附加信息的合并表。
- 合并所有附加信息表
- 关联唯一ID表
再次导入merged_sheet:「获取数据」→「从工作簿」→「当前工作簿」,勾选merged_sheet后导入。点击「主页」→「合并查询」→「合并查询作为新查询」,选择唯一ID表的A列、附加信息合并表的A列,连接类型选「左外部」,确定。
- 关联唯一ID表
- 展开匹配信息
点击合并后新列的展开按钮,勾选需要展示的附加信息列(比如B列),取消前缀勾选,确定。此时每个ID的所有匹配信息会自动按行显示。
- 展开匹配信息
- 加载回Excel
点击「主页」→「关闭并上载」,选择加载到新工作表或覆盖原merged_sheet(记得先备份数据)。后续数据更新时,右键查询表选「刷新」即可同步。
- 加载回Excel
方案二:VBA宏(一键操作)
如果能启用宏,用代码可以直接完成插入行和拆分:
- 代码示例:
Sub SplitAndExpandData() Dim wsMerged As Worksheet, ws As Worksheet Dim lastRowMerged As Long, lastRowWs As Long Dim i As Long, j As Long Set wsMerged = ThisWorkbook.Worksheets("merged_sheet") lastRowMerged = wsMerged.Cells(Rows.Count, "A").End(xlUp).Row ' 遍历所有非merged_sheet的工作表 For Each ws In ThisWorkbook.Worksheets If ws.Name <> "merged_sheet" Then lastRowWs = ws.Cells(Rows.Count, "A").End(xlUp).Row ' 从下往上遍历merged_sheet的ID,避免插入行打乱序号 For i = lastRowMerged To 2 Step -1 ' 查找当前ID在当前工作表的所有匹配项 For j = lastRowWs To 2 Step -1 If ws.Cells(j, "A").Value = wsMerged.Cells(i, "A").Value Then ' 插入新行并复制ID和附加信息 wsMerged.Rows(i + 1).Insert Shift:=xlDown wsMerged.Cells(i + 1, "A").Value = wsMerged.Cells(i, "A").Value wsMerged.Cells(i + 1, "B").Value = ws.Cells(j, "B").Value ' 若有更多列需要复制,添加类似wsMerged.Cells(i+1, "C").Value = ws.Cells(j, "C").Value的代码 End If Next j Next i ' 更新merged_sheet的总行数 lastRowMerged = wsMerged.Cells(Rows.Count, "A").End(xlUp).Row End If Next ws End Sub
- 使用步骤:
- 按
Alt+F11打开VBA编辑器,右键工作簿→「插入」→「模块」,粘贴代码。 - 确认所有工作表的A列是ID,B列是附加信息(列不同的话,修改代码里的列号,比如"B"改成"C")。
- 点击编辑器里的运行按钮,或按
F5执行宏。执行前务必备份原工作簿!
- 按
内容的提问来源于stack exchange,提问作者Felis
相关产品推荐
相关产品推荐

