Excel中提取唯一姓氏并将对应家庭成员姓名合并为逗号分隔值的实现方法
Excel中提取唯一姓氏并将对应家庭成员姓名合并为逗号分隔值的实现方法
嗨,我完全懂你的需求——把表格里重复的姓氏提取成唯一列表,再把每个姓氏对应的家庭成员姓名合并成逗号分隔的字符串对吧?之前试过数据透视表没用太正常了,因为它主打求和、计数这类聚合操作,没法直接做文本合并。下面给你几种适配不同Excel版本的解决方案:
方法一:适用于Excel 365/2021(支持动态数组)
这个版本的Excel自带的函数就能轻松搞定,步骤超简单:
- 提取唯一姓氏:假设你的姓氏列是A列(比如数据从A2到A10),找个空白列(比如D列),在D2单元格输入:
回车后,Excel会自动生成所有不重复的姓氏列表,不用手动下拉填充。=UNIQUE(A2:A10) - 合并对应家庭成员姓名:在D列旁边的E2单元格输入:
同样回车后,Excel会自动匹配每个姓氏,把对应的姓名用逗号加空格连接起来。如果FILTER函数用不习惯,也可以用IF的数组写法:=TEXTJOIN(", ", TRUE, FILTER(B2:B10, A2:A10=D2))=TEXTJOIN(", ", TRUE, IF(A2:A10=D2, B2:B10, ""))
方法二:适用于旧版Excel(2019及更早,无动态数组)
如果你的Excel版本比较旧,得换个思路来实现:
- 提取唯一姓氏:
- 先把A列的姓氏复制到空白列(比如D列)
- 选中D列,点击顶部菜单栏的「数据」→「删除重复值」,在弹出的窗口里确认只选当前列,点击确定后就得到唯一姓氏列表了。
- 合并对应家庭成员姓名:
- 如果你的Excel有TEXTJOIN函数(2019版本有),在E2单元格输入数组公式:
输入完不要直接回车,要按=TEXTJOIN(", ", TRUE, IF($A$2:$A$10=D2, $B$2:$B$10, ""))Ctrl+Shift+Enter触发数组计算,然后下拉填充到所有姓氏行。 - 如果你的Excel连TEXTJOIN都没有(比如2016及更早),可以用自定义VBA函数:
- 按
Alt+F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 在弹出的代码窗口里粘贴这段代码:
Function CONCATIF(rng As Range, criteria As Variant, concatRng As Range, Optional delimiter As String = ", ") As String Dim cell As Range Dim result As String result = "" For Each cell In rng If cell.Value = criteria Then If result <> "" Then result = result & delimiter result = result & concatRng.Cells(cell.Row - rng.Row + 1).Value End If Next cell CONCATIF = result End Function - 回到Excel界面,在E2单元格输入:
=CONCATIF($A$2:$A$10, D2, $B$2:$B$10)
- 按
- 如果你的Excel有TEXTJOIN函数(2019版本有),在E2单元格输入数组公式:
你可以根据自己的Excel版本选对应的方法,测试一下应该就能得到你想要的输出啦~
备注:内容来源于stack exchange,提问作者DigitalNomad
相关产品推荐
相关产品推荐

