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

Excel VBA表格操作:基于首列分组转置列 实现二列数据转多列

方案1:动态数组公式实现(Excel 365/2021及以上版本适用)

无需代码即可实现,操作步骤如下:

  • 假设原始数据存放在Sheet1的A、B两列,A1、B1为表头
  • 若要一键生成全部结果,可在空白工作表的A1单元格直接输入公式:
    =HSTACK(VSTACK("Group",UNIQUE(Sheet1!A2:A)),BYROW(UNIQUE(Sheet1!A2:A),LAMBDA(g,VSTACK("ID"&SEQUENCE(160),TRANSPOSE(FILTER(Sheet1!B:B,Sheet1!A:A=g))))))
    公式会自动溢出所有分组、表头和对应ID值,无需下拉或额外操作。
方案2:VBA实现(兼容所有Excel版本)

适合低版本Excel用户,操作步骤如下:

  1. 按Alt+F11打开VBA编辑器,右键点击左侧当前工作簿名称,选择「插入」→「模块」
  2. 将以下代码粘贴到模块编辑区:
Sub 两列转分组行()
    Dim 原始表 As Worksheet, 结果表 As Worksheet
    Dim 最后行 As Long, i As Long, 分组行 As Long, ID列序号 As Long
    Dim 当前分组 As String, 单组ID数量 As Long
    
    ' 可根据实际情况调整以下参数
    Set 原始表 = ThisWorkbook.Worksheets("Sheet1") ' 原始数据所在工作表名称
    单组ID数量 = 160 ' 每个分组固定的ID数量
    
    ' 新建工作表存储结果
    Set 结果表 = ThisWorkbook.Worksheets.Add
    ' 写入结果表头
    结果表.Range("A1") = "Group"
    For i = 1 To 单组ID数量
        结果表.Cells(1, i + 1) = "ID" & i
    Next
    
    最后行 = 原始表.Cells(Rows.Count, "A").End(xlUp).Row
    分组行 = 2
    当前分组 = 原始表.Cells(2, "A").Value
    结果表.Cells(分组行, "A") = 当前分组
    ID列序号 = 2
    
    ' 遍历原始数据生成结果
    For i = 2 To 最后行
        If 原始表.Cells(i, "A").Value = 当前分组 Then
            结果表.Cells(分组行, ID列序号) = 原始表.Cells(i, "B").Value
            ID列序号 = ID列序号 + 1
        Else
            分组行 = 分组行 + 1
            当前分组 = 原始表.Cells(i, "A").Value
            结果表.Cells(分组行, "A") = 当前分组
            ID列序号 = 2
            结果表.Cells(分组行, ID列序号) = 原始表.Cells(i, "B").Value
            ID列序号 = ID列序号 + 1
        End If
    Next
    
    结果表.Columns.AutoFit
    MsgBox "转换完成,共处理" & 分组行 - 1 & "个分组"
End Sub
  1. 按F5运行代码,即可自动生成符合要求的结果表。

内容的提问来源于stack exchange,提问作者alexandro-rezakhani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:09:00