如何在Excel中合并重复行并保留非空白值或最长字符串?
如何在Excel中合并重复行并保留非空白值或最长字符串?
当然可以!这种合并重复行、保留有效数据的需求在Excel里完全能实现,我给你分享两种实用方法,你可以根据自己的Excel版本和操作习惯来选~
方法一:用Power Query(Get & Transform)可视化操作(推荐)
这个方法不用记复杂公式,全程可视化操作,适合数据量稍大的情况:
- 选中你的数据区域,点击顶部菜单栏的「数据」选项卡,找到「从表格/区域」(弹出对话框时记得勾选“我的表格有标题”)。
- 进入Power Query编辑器后,选中用来判断重复的列(比如你的「Name」列),点击「转换」选项卡的「分组依据」。
- 在分组依据弹窗里,设置:
- 分组依据:选择「Name」列
- 新列名:随便起个名字,比如「合并记录」
- 操作:选择「所有行」,然后点击确定。
- 现在你会看到每个姓名对应一行“记录”,点击「合并记录」列旁边的展开按钮,选择「提取值」——不过如果要精准保留非空白值,更推荐添加自定义列:
点击「添加列」→「自定义列」,针对每个字段写公式,比如Email列:
这个公式的意思是:如果第一个Email非空就用它,否则用第二个重复行里的Email。同理给Phone、Address列都创建对应的自定义列。[Email] ?? [Email.1] - 最后删掉多余的原始列,点击「关闭并上载」,就能得到合并好的表格啦!
方法二:用公式实现(适合快速小批量数据)
如果不想用Power Query,用函数也能搞定:
- 首先提取唯一姓名:在空白列输入
=UNIQUE(A:A)(A列是你的姓名列),回车后会自动生成所有不重复的姓名。 - 合并非空白值:以Email列为例,在唯一姓名对应的单元格输入:
这里D2是唯一姓名的单元格,旧版Excel需要按「Ctrl+Shift+Enter」触发数组公式,新版直接回车就行。这个公式会把同一个姓名下所有非空的Email合并成一个字符串。=TEXTJOIN("",TRUE,IF(A:A=D2,B:B,"")) - 取最长字符串:如果要保留某个字段里最长的内容,比如Email列,用这个公式:
同样旧版按「Ctrl+Shift+Enter」,这个公式会找到同一个姓名下最长的Email内容并返回。=INDEX(B:B,MATCH(MAX(LEN(IF(A:A=D2,B:B,""))),LEN(IF(A:A=D2,B:B,"")),0))
举个直观的例子
你原来的表格大概是这样:
| Name | Phone | Address | |
|---|---|---|---|
| Jane | jane@test.com | ||
| Jane | 123-4567 | 123 Main St | |
| John | 987-6543 | ||
| John | john@test.com | 456 Oak Ave |
用上面的方法处理后,就能得到你想要的结果:
| Name | Phone | Address | |
|---|---|---|---|
| Jane | jane@test.com | 123-4567 | 123 Main St |
| John | john@test.com | 987-6543 | 456 Oak Ave |
备注:内容来源于stack exchange,提问作者CM L




