You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中按人员类型分组转换数据格式的实现方式咨询

Excel中按人员类型分组转换数据格式的实现方式咨询

当然可以实现啦!不管是用Excel自带的工具,还是写自定义宏都能搞定,我给你分两种情况详细说说:

一、用Excel内置工具(无需写宏)

方法1:Power Query(推荐,适合批量处理)

这是Excel自带的强大数据转换工具,操作可视化,适合数据量较大的情况:

  • 选中你的原始数据区域(包含item id、person type、person id三列),点击顶部「数据」选项卡 → 「从表格/区域」(旧版Excel找「获取和转换」组里的「从表格」),确认数据有表头后进入Power Query编辑器。
  • 在编辑器里选中person type列,点击「转换」选项卡 → 「透视列」。
  • 在弹出的设置窗口中,「值列」选择person id,然后点击「聚合函数」旁边的「高级」,选择「自定义」,输入Text.Combine(_, ", ")(这是Power Query的M语言,用来合并多个id为逗号分隔的字符串),点击确定。
  • 完成透视后,点击「关闭并上载」,就能得到你想要的格式:每行对应一个item id,各人员类型列里是逗号分隔的person id列表。

方法2:TEXTJOIN+IF公式(适合小数据量)

如果你的数据量不大,用公式就能快速搞定:

  1. 先提取所有唯一的item id:可以用UNIQUE(A:A)函数(Excel 365/2021及以上版本),或者用「数据」选项卡的「高级筛选」来提取不重复值,把这些唯一id放在新的列(比如E列)。
  2. 假设你要生成avocats列(F列),在F2单元格输入公式:
    =TEXTJOIN(", ", TRUE, IF(($A$2:$A$100=E2)*($B$2:$B$100="avocats"), $C$2:$C$100, ""))
    
    注:如果是旧版Excel,输入后需要按Ctrl+Shift+Enter作为数组公式执行;新版直接按回车就行。
  3. 把公式复制到其他人员类型列,只需要把公式里的"avocats"换成对应的类型(比如"juristes")即可。

二、自定义VBA宏(适合频繁重复操作或超大数据量)

如果需要经常做这个转换,或者数据量特别大,写个宏会更高效。这里给你一个简单的示例宏,你可以根据自己的实际人员类型调整:

Sub TransformPersonData()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRow As Long, i As Long, targetRow As Long
    Dim itemID As String, personType As String, personID As String
    Dim dataDict As Object
    
    ' 替换成你的原始数据工作表名称
    Set wsSource = ThisWorkbook.Sheets("原始数据")
    ' 创建新工作表存放结果
    Set wsTarget = ThisWorkbook.Sheets.Add
    Set dataDict = CreateObject("Scripting.Dictionary")
    
    ' 设置结果表头,根据你的5种人员类型补充后续列
    wsTarget.Range("A1").Value = "item id"
    wsTarget.Range("B1").Value = "avocats"
    wsTarget.Range("C1").Value = "juristes"
    ' wsTarget.Range("D1").Value = "其他类型1"
    ' ...继续添加剩下的类型
    
    ' 获取原始数据最后一行
    lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历原始数据,用字典存储每个item对应的各类型id列表
    For i = 2 To lastRow
        itemID = wsSource.Cells(i, "A").Value
        personType = wsSource.Cells(i, "B").Value
        personID = wsSource.Cells(i, "C").Value
        
        ' 如果字典里没有这个item,初始化空列表
        If Not dataDict.Exists(itemID) Then
            ' 数组长度对应你的人员类型数量,这里先写2个,自己补充到5个
            dataDict(itemID) = Array("", "")
        End If
        
        ' 根据人员类型把id追加到对应位置
        Select Case personType
            Case "avocats"
                dataDict(itemID)(0) = dataDict(itemID)(0) & IIf(dataDict(itemID)(0) <> "", ", ", "") & personID
            Case "juristes"
                dataDict(itemID)(1) = dataDict(itemID)(1) & IIf(dataDict(itemID)(1) <> "", ", ", "") & personID
            ' Case "其他类型1"
            '     dataDict(itemID)(2) = ...
            ' 继续添加剩下的人员类型判断
        End Select
    Next i
    
    ' 把字典里的数据输出到结果工作表
    targetRow = 2
    For Each key In dataDict.Keys
        wsTarget.Cells(targetRow, "A").Value = key
        wsTarget.Cells(targetRow, "B").Value = dataDict(key)(0)
        wsTarget.Cells(targetRow, "C").Value = dataDict(key)(1)
        ' 对应补充其他列的输出
        targetRow = targetRow + 1
    Next key
    
    MsgBox "数据转换完成!"
End Sub

使用时记得先开启开发工具选项卡,把宏粘贴到VBA编辑器里,调整好工作表名称和人员类型后运行即可。

备注:内容来源于stack exchange,提问作者serge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:38:11