如何在Excel、LibreOffice或Google Sheets中合并行列数量不同的工作表?
如何在Excel、LibreOffice或Google Sheets中合并行列数量不同的工作表?
嘿,我来帮你搞定这个合并不同行列工作表的问题!针对你给出的例子(Sheet1包含姓名、年龄、电话,Sheet2有姓名、邮箱、生日,还多了John这条数据),下面分别说说三个工具的具体操作方法:
Excel方法
方法1:用XLOOKUP函数(Excel 365/2021及以上版本,推荐)
- 新建空白工作表作为结果表,先把所有表头合并:
Name、Age、Phone、Email、Birthday,依次列在A1到E1单元格。 - 合并两个表的
Name列到结果表A列:可以把Sheet1的A2:A3和Sheet2的A2:A4复制到结果表A2:A5,再用=UNIQUE(A2:A5)公式去重(手动整理也没问题)。 - 填充Age列(B2单元格):输入公式
=XLOOKUP(A2, Sheet1!A:A, Sheet1!B:B, ""),下拉填充——找不到对应值的单元格会显示空,完美适配你的需求。 - 填充Phone列(C2单元格):
=XLOOKUP(A2, Sheet1!A:A, Sheet1!C:C, ""),下拉填充。 - 填充Email列(D2单元格):
=XLOOKUP(A2, Sheet2!A:A, Sheet2!B:B, ""),下拉填充。 - 填充Birthday列(E2单元格):
=XLOOKUP(A2, Sheet2!A:A, Sheet2!C:C, ""),下拉填充。
方法2:用Power Query(适合大量数据)
- 选中Sheet1的数据区域,点击「数据」选项卡 → 「从表格/区域」,加载到Power Query编辑器。
- 同样操作Sheet2,把它也加载到Power Query编辑器。
- 在编辑器中,点击「合并查询」→ 「合并查询作为新查询」,选择两个表,匹配列选
Name,连接类型选完全外部连接(这样能保留所有姓名,包括只在一个表中出现的John)。 - 点击合并后的列旁边的展开按钮,选择要展开的
Email、Birthday字段,取消勾选「使用原始列名作为前缀」。 - 整理好表头后,点击「关闭并上载」,就能得到你想要的合并结果啦。
LibreOffice Calc方法
方法1:用VLOOKUP函数
- 新建结果表,表头同样设为
Name、Age、Phone、Email、Birthday。 - 合并两个表的
Name列到结果表A列,手动去重或者用=UNIQUE(A2:A5)公式处理。 - Age列(B2单元格):输入公式
=IFERROR(VLOOKUP(A2, Sheet1.$A:$C, 2, 0), ""),下拉填充——IFERROR能让找不到值的单元格显示空,避免报错。 - Phone列(C2单元格):
=IFERROR(VLOOKUP(A2, Sheet1.$A:$C, 3, 0), ""),下拉填充。 - Email列(D2单元格):
=IFERROR(VLOOKUP(A2, Sheet2.$A:$C, 2, 0), ""),下拉填充。 - Birthday列(E2单元格):
=IFERROR(VLOOKUP(A2, Sheet2.$A:$C, 3, 0), ""),下拉填充。
方法2:用数据透视表快速合并
- 把两个表的数据复制到同一个空白工作表,记得保留各自的表头,再添加一个辅助列标记数据来源(比如写
Sheet1、Sheet2)。 - 选中所有数据,点击「数据」→ 「数据透视表」,在设置界面把
Name拖到行区域,把Age、Phone、Email、Birthday拖到值区域,值字段设置为「最大值」或「最小值」(因为每个姓名对应唯一值,结果不受影响)。 - 最后把透视表的结果转换成普通表格就完成了。
Google Sheets方法
方法1:用QUERY+VLOOKUP组合
- 新建结果表,表头设为
Name、Age、Phone、Email、Birthday。 - 获取所有唯一姓名:在A2单元格输入
=UNIQUE({Sheet1!A2:A; Sheet2!A2:A}),公式会自动合并两个表的姓名并去重,非常省心。 - Age列(B2单元格):
=IFERROR(VLOOKUP(A2, Sheet1!A:C, 2, FALSE), ""),下拉填充。 - Phone列(C2单元格):
=IFERROR(VLOOKUP(A2, Sheet1!A:C, 3, FALSE), ""),下拉填充。 - Email列(D2单元格):
=IFERROR(VLOOKUP(A2, Sheet2!A:C, 2, FALSE), ""),下拉填充。 - Birthday列(E2单元格):
=IFERROR(VLOOKUP(A2, Sheet2!A:C, 3, FALSE), ""),下拉填充。
方法2:用INDEX+MATCH(更灵活)
如果觉得VLOOKUP不够灵活,可以用INDEX+MATCH组合,比如Age列公式:=IFERROR(INDEX(Sheet1!B:B, MATCH(A2, Sheet1!A:A, 0)), ""),其他列只要替换对应的列序号就能用啦。
备注:内容来源于stack exchange,提问作者Diego R




