如何统计单个单元格内姓名出现次数并生成指定汇总格式?
统计单个单元格内姓名出现次数并格式化输出
方法1:Excel动态数组公式(适用于Excel 365/2021)
直接在目标单元格输入以下公式,即可自动生成格式化后的结果:
=TEXTJOIN(", ", TRUE, IF(COUNTIF(TEXTSPLIT(A1, ", "), UNIQUE(TEXTSPLIT(A1, ", ")))>1, UNIQUE(TEXTSPLIT(A1, ", "))&" x "&COUNTIF(TEXTSPLIT(A1, ", "), UNIQUE(TEXTSPLIT(A1, ", "))), UNIQUE(TEXTSPLIT(A1, ", "))))
公式逻辑说明:
TEXTSPLIT(A1, ", "):将A1中逗号加空格分隔的姓名拆分为独立数组UNIQUE(...):提取数组中的不重复姓名COUNTIF(...):统计每个不重复姓名的出现次数IF(...):对出现次数>1的姓名拼接「姓名 x 次数」格式,次数=1的直接显示姓名TEXTJOIN(...):将所有结果用逗号加空格连接成最终字符串
方法2:VBA自定义函数(适用于所有Excel版本)
如果你的Excel版本不支持动态数组,可以用VBA编写自定义函数:
- 按
Alt+F11打开VBA编辑器 - 右键点击左侧项目浏览器中的工作簿名称,选择「插入」→「模块」
- 粘贴以下代码:
Function CountNames(cell As Range) As String Dim nameArr() As String Dim nameDict As Object Dim i As Integer Dim result As String Set nameDict = CreateObject("Scripting.Dictionary") nameArr = Split(cell.Value, ", ") ' 统计每个姓名的出现次数 For i = LBound(nameArr) To UBound(nameArr) If nameDict.Exists(nameArr(i)) Then nameDict(nameArr(i)) = nameDict(nameArr(i)) + 1 Else nameDict(nameArr(i)) = 1 End If Next i ' 拼接格式化结果 For Each key In nameDict.Keys If nameDict(key) > 1 Then result = result & key & " x " & nameDict(key) & ", " Else result = result & key & ", " End If Next key ' 移除末尾多余的逗号和空格 CountNames = Left(result, Len(result) - 2) End Function
- 返回Excel界面,在目标单元格输入
=CountNames(A1)即可得到结果
注意事项
如果姓名中包含逗号(非分隔用逗号),需要调整拆分规则,比如改用其他分隔符,或提前统一姓名的格式。
内容的提问来源于stack exchange,提问作者Andy Affo Forward




