如何用Excel公式提取列值并将人员所属组以逗号分隔汇总到单元格?
Excel人员组汇总及列值逗号分隔实现方案
一、按人员汇总所属组(匹配示例需求)
假设原始数据中:
- A列为人员姓名(对应
Raw Data区域第一列) - B列为对应组名(对应
Raw Data区域第二列) - 期望结果的人员姓名在D列,需在E列生成汇总后的组列表
1. Excel 365/2021及后续版本(推荐)
直接用TEXTJOIN+FILTER函数,无需数组确认:
=TEXTJOIN(", ", TRUE, FILTER($B$2:$B$10, $A$2:$A$10=D2, ""))
- 说明:
FILTER($B$2:$B$10, $A$2:$A$10=D2, ""):筛选出A列等于当前人员(D2)的所有组名TEXTJOIN(", ", TRUE, ...):将筛选结果用「逗号+空格」连接,TRUE参数自动忽略空值
如果习惯用IF函数,也可以写成:
=TEXTJOIN(", ", TRUE, IF($A$2:$A$10=D2, $B$2:$B$10, ""))
2. Excel 2019及更早版本
方法1:数组公式(需按Ctrl+Shift+Enter确认输入)
=LEFT(CONCAT(IF($A$2:$A$10=D2, $B$2:$B$10&", ", "")), LEN(CONCAT(IF($A$2:$A$10=D2, $B$2:$B$10&", ", "")))-2)
- 说明:
- 先通过
IF给匹配到的组名添加「逗号+空格」,未匹配项留空 - 用
CONCAT拼接所有符合条件的字符串 - 最后用
LEFT去掉末尾多余的「逗号+空格」
- 先通过
方法2:VBA自定义函数
- 按
Alt+F11打开VBA编辑器,插入一个新模块 - 粘贴以下代码:
Function JoinGroups(targetName As String, nameRange As Range, groupRange As Range) As String Dim cell As Range Dim res As String res = "" For Each cell In nameRange If cell.Value = targetName Then If res <> "" Then res = res & ", " res = res & groupRange(cell.Row - nameRange.Row + 1).Value End If Next cell JoinGroups = res End Function
- 返回Excel,在目标单元格输入:
=JoinGroups(D2, $A$2:$A$10, $B$2:$B$10)
二、提取整列值并逗号分隔显示
如果只是要把某一列的非空值提取出来,合并成单个逗号分隔的单元格:
- Excel 365/2021:
=TEXTJOIN(", ", TRUE, $B$2:$B$10) - Excel 2019及更早版本(数组公式,按
Ctrl+Shift+Enter):=LEFT(CONCAT($B$2:$B$10&", ", ""), LEN(CONCAT($B$2:$B$10&", ", ""))-2)
内容的提问来源于stack exchange,提问作者user1822263
相关产品推荐
相关产品推荐

