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用户,操作步骤如下:
- 按
Alt+F11打开VBA编辑器,右键点击左侧当前工作簿名称,选择「插入」→「模块」 - 将以下代码粘贴到模块编辑区:
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
- 按
F5运行代码,即可自动生成符合要求的结果表。
内容的提问来源于stack exchange,提问作者alexandro-rezakhani
相关产品推荐
相关产品推荐

