You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Excel、LibreOffice或Google Sheets中合并行列数量不同的工作表?

如何在Excel、LibreOffice或Google Sheets中合并行列数量不同的工作表?

嘿,我来帮你搞定这个合并不同行列工作表的问题!针对你给出的例子(Sheet1包含姓名、年龄、电话,Sheet2有姓名、邮箱、生日,还多了John这条数据),下面分别说说三个工具的具体操作方法:

Excel方法

方法1:用XLOOKUP函数(Excel 365/2021及以上版本,推荐)

  • 新建空白工作表作为结果表,先把所有表头合并:NameAgePhoneEmailBirthday,依次列在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)。
  • 点击合并后的列旁边的展开按钮,选择要展开的EmailBirthday字段,取消勾选「使用原始列名作为前缀」。
  • 整理好表头后,点击「关闭并上载」,就能得到你想要的合并结果啦。

LibreOffice Calc方法

方法1:用VLOOKUP函数

  • 新建结果表,表头同样设为NameAgePhoneEmailBirthday
  • 合并两个表的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:用数据透视表快速合并

  • 把两个表的数据复制到同一个空白工作表,记得保留各自的表头,再添加一个辅助列标记数据来源(比如写Sheet1Sheet2)。
  • 选中所有数据,点击「数据」→ 「数据透视表」,在设置界面把Name拖到行区域,把AgePhoneEmailBirthday拖到值区域,值字段设置为「最大值」或「最小值」(因为每个姓名对应唯一值,结果不受影响)。
  • 最后把透视表的结果转换成普通表格就完成了。

Google Sheets方法

方法1:用QUERY+VLOOKUP组合

  • 新建结果表,表头设为NameAgePhoneEmailBirthday
  • 获取所有唯一姓名:在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

火山引擎 最新活动