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

如何将分组结构的宽表转为多行格式?Excel能否用Group By?

解决Excel宽表转窄表(逆透视)的方案

首先明确说:Excel的Group By功能是用来做数据聚合统计的(比如求和、计数、取平均值这类操作),没法直接实现你要的列转行(逆透视)需求。不过有几种更合适的方法能快速完成你的目标,下面给你详细说说:

方法1:Power Query(首推,适合大量数据)

Power Query是Excel自带的专业数据处理工具,对付这种结构转换特别顺手:

  1. 选中你的原始数据区域(要包含表头),点击顶部「数据」选项卡 → 「从表格/区域」,弹出对话框时确认勾选“我的表格有标题”
  2. 进入Power Query编辑器后,选中ID列,右键点击 → 选择「逆透视其他列」
  3. 这时生成的两列默认叫「属性」和「值」,你右键把它们重命名为Column和DATA就行
  4. 点击编辑器顶部的「关闭并上载」,就能得到你想要的窄表结构了

方法2:公式法(适合小体量数据)

如果数据行数和列数不多,可以用组合公式手动生成目标表:
假设原始数据在A1:E3区域(A列是ID,B到E是各类Column列),在新工作表的A1单元格输入:

=INDEX($A:$A,INT((ROW()-1)/4)+1)

B1单元格输入:

=INDEX($1:$1,MOD(ROW()-1,4)+2)

C1单元格输入:

=INDEX($B:$E,INT((ROW()-1)/4)+1,MOD(ROW()-1,4)+1)

然后下拉填充这三个公式,直到出现空值就停。(公式里的4是你原始数据中每组的列数,比如Column1有4列就填4,根据实际情况调整就行)

方法3:VBA宏(适合需要重复操作的场景)

如果你以后要频繁做这种转换,可以写个简单的宏来自动化:

Sub UnpivotTable()
    Dim srcSheet As Worksheet, destSheet As Worksheet
    Dim lastRow As Long, lastCol As Long, i As Long, j As Long, k As Long
    
    Set srcSheet = ActiveSheet
    Set destSheet = ThisWorkbook.Sheets.Add
    
    '写入新表头
    destSheet.Range("A1:C1") = Array("ID", "Column", "DATA")
    k = 2
    
    lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row
    lastCol = srcSheet.Cells(1, srcSheet.Columns.Count).End(xlToLeft).Column
    
    '遍历原始数据并转换
    For i = 2 To lastRow
        For j = 2 To lastCol
            destSheet.Cells(k, 1) = srcSheet.Cells(i, 1)
            destSheet.Cells(k, 2) = srcSheet.Cells(1, j)
            destSheet.Cells(k, 3) = srcSheet.Cells(i, j)
            k = k + 1
        Next j
    Next i
    
    '自动调整列宽
    destSheet.Columns.AutoFit
End Sub

使用方法:按Alt+F11打开VBA编辑器,插入一个新模块,把代码粘贴进去,回到Excel界面执行这个宏就搞定了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:08:21