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

行数据转堆叠列数据:多列姓名合并为单列的技术需求

批量将多列姓名转换为单列对应机构编号的方法

问题场景

你有一份包含1866个唯一机构编号的表格,每个机构的姓名已被拆分到多列中,需要把这些多列姓名堆叠成单列,同时对应重复的机构编号,最终得到「机构编号+单个姓名」的一行一条数据格式。

原始示例数据

机构编号(Est No)姓名及角色(Names and roles)
4KAIROUZ, TONY - 高级管理及肉类授权签字人; LAUBSCH, ASHLEY - 运营管理及肉类授权签字人
7ALLEN, CHRIS - 运营管理及肉类授权签字人; BADMAN, MICHAEL - 质量管理及肉类授权签字人; BAKER, ALAN - 仅联系人-已备案机构; BROOKS, STEWART - 运营管理、RFP及肉类授权签字人
8FANG, JENNY - 运营管理; LI, DAJIAN - 高级管理

当前进度(已拆分多列)

机构编号(Est No)姓名(Name)姓名(Name)姓名(Name)
4TONY KAIROUZASHLEY LAUBSCH
7CHRIS ALLENMICHAEL BADMANALAN BAKER

目标格式

机构编号(Est No)姓名(Name)
4TONY KAIROUZ
4ASHLEY LAUBSCH
7CHRIS ALLEN
7MICHAEL BADMAN
7ALAN BAKER
7STEWART BROOKS
8JENNY FANG
8DAJIAN LI

解决方案

方法一:Excel Power Query(推荐,适合大量数据)

这是处理批量数据最高效的方式:

  1. 选中你的数据区域(包含机构编号列和所有姓名列)
  2. 点击顶部「数据」选项卡 → 「从表格/区域」(旧版Excel找「Power Query」选项卡)
  3. 在Power Query编辑器里,选中所有姓名列(不要选机构编号列)
  4. 点击「转换」选项卡 → 「逆透视列」→ 「逆透视其他列」
  5. 此时会生成「属性」和「值」两列,删掉「属性」列,把「值」列重命名为「姓名(Name)」
  6. 筛选掉「值」列里的空单元格
  7. 点击「关闭并上载」,直接得到目标格式的表格

方法二:Excel公式法(适合小量数据或不想用Power Query)

假设机构编号在A列,姓名列从B到Z列:

  1. 在空白列(比如AA列)输入公式,生成重复的机构编号:
    =INDEX($A:$A,INT((ROW()-ROW(AA1))/COUNTA($B$1:$Z$1))+1)
    注:COUNTA($B$1:$Z$1)替换成你实际的姓名列表头范围
  2. 在AB列输入公式,依次提取多列里的姓名:
    =INDEX($B:$Z,INT((ROW()-ROW(AB1))/COUNTA($B$1:$Z$1))+1,MOD(ROW()-ROW(AB1),COUNTA($B$1:$Z$1))+1)
  3. 下拉这两列的公式直到出现空值,最后筛选掉AB列的空单元格即可

方法三:VBA脚本(自动化批量处理)

适合需要重复操作的场景,步骤如下:

  1. 打开Excel,按Alt+F11打开VBA编辑器
  2. 右键点击左侧工作表 → 插入 → 模块
  3. 粘贴以下代码:
Sub UnstackNames()
    Dim wsSource As Worksheet, wsDest As Worksheet
    Dim lastRow As Long, lastCol As Long, i As Long, j As Long, destRow As Long
    
    Set wsSource = ActiveSheet
    Set wsDest = ThisWorkbook.Sheets.Add
    destRow = 1
    
    '写入表头
    wsDest.Cells(destRow, 1) = "机构编号(Est No)"
    wsDest.Cells(destRow, 2) = "姓名(Name)"
    destRow = destRow + 1
    
    lastRow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
    lastCol = wsSource.Cells(1, Columns.Count).End(xlToLeft).Column
    
    For i = 2 To lastRow
        For j = 2 To lastCol
            If wsSource.Cells(i, j).Value <> "" Then
                wsDest.Cells(destRow, 1) = wsSource.Cells(i, 1).Value
                wsDest.Cells(destRow, 2) = wsSource.Cells(i, j).Value
                destRow = destRow + 1
            End If
        Next j
    Next i
    
    '自动调整列宽
    wsDest.Columns.AutoFit
End Sub
  1. 点击工具栏的「运行」按钮(绿色三角),脚本会自动新建工作表并生成目标格式数据

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:24:52