基于ID合并两个工作表数据,插入匹配ID的多行至Sheet1
解决方案:将Sheet2多行匹配数据展开到Sheet1
我来帮你搞定这个需求!你要的其实是把Sheet2中同一个ID对应的多条记录逐一展开到Sheet1,让每个ID的每一条匹配数据都在Sheet1单独占一行对吧?下面给你两种实用方案,按需选择:
方案一:Power Query(推荐,高效批量处理)
这个方法不用写复杂公式,适合数据量较大或者需要后续更新的场景:
- 打开你的Excel工作簿,点击顶部「数据」选项卡,选择「获取数据」>「自文件」>「自工作簿」,选中当前打开的这个工作簿。
- 在弹出的「导航器」窗口里,同时勾选Sheet1和Sheet2,然后点击「加载到」>「仅创建连接」,点击确定。
- 再次点击「数据」>「获取数据」>「合并查询」>「合并查询作为新查询」:
- 上半部分选择Sheet1,下半部分选择Sheet2,匹配列都选A列(ID列),连接类型选「左外部」(确保Sheet1里的所有ID都不会丢失)。
- 进入合并后的查询编辑器后,找到Sheet2对应的列(列名大概是「Sheet2」),点击列标题右侧的展开按钮(带箭头的图标),勾选你要导入的B、C列,取消「使用原始列名作为前缀」的勾选,点击确定。
- 现在你就能看到每个ID对应的所有Sheet2行都展开了,直接点击「关闭并上载」,选择把结果上载到新工作表(建议先看结果再覆盖原Sheet1)。
- 后续Sheet2新增数据的话,右键新工作表的查询区域,选择「刷新」就能自动更新数据。
方案二:数组公式+辅助列(适合不想用Power Query的场景)
如果你的Excel版本是365/2021(支持动态数组),或者愿意用数组公式,可以试试这个方法:
假设Sheet1的ID在A列,Sheet2的ID在A列,B、C列是需要提取的数据:
- 在Sheet1的B2单元格输入公式:
=INDEX(Sheet2!B:B, SMALL(IF(Sheet2!$A:$A=$A2, ROW(Sheet2!$A:$A)), COLUMN(A:A)))- 旧版Excel输入完要按
Ctrl+Shift+Enter触发数组公式;新版直接回车即可。
- 旧版Excel输入完要按
- 把B2的公式向右拖到C列,再向下批量拖动公式,直到出现
#NUM!,就说明这个ID对应的所有Sheet2数据都提取完了。 - 最后可以通过筛选功能,把
#NUM!的行删掉,整理成干净的表格。
注意事项
- Power Query方案更适合长期维护的表格,刷新方便,性能更好;
- 公式方案如果数据量超过1万行可能会卡顿,需要手动处理空行。
内容的提问来源于stack exchange,提问作者Connor Titor
相关产品推荐
相关产品推荐

