You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何统计单个单元格内姓名出现次数并生成指定汇总格式?

统计单个单元格内姓名出现次数并格式化输出

方法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编写自定义函数:

  1. Alt+F11打开VBA编辑器
  2. 右键点击左侧项目浏览器中的工作簿名称,选择「插入」→「模块」
  3. 粘贴以下代码:
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
  1. 返回Excel界面,在目标单元格输入=CountNames(A1)即可得到结果

注意事项

如果姓名中包含逗号(非分隔用逗号),需要调整拆分规则,比如改用其他分隔符,或提前统一姓名的格式。

内容的提问来源于stack exchange,提问作者Andy Affo Forward

火山引擎 最新活动