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

如何对含列组的数据表执行Unpivot操作?已尝试INDEX等函数未果

表格宽转长的三种可行解法

一、Excel动态数组公式(适用于365/2021及以上版本)

直接用一个公式生成完整结果,无需手动下拉填充:
在空白单元格(比如A6)输入以下公式后按回车,会自动溢出所有结果:

=LET(
    用户区域, A2:A3,
    数据区域, B2:G3,
    用户数量, ROWS(用户区域),
    每组数量, 2,
    生成用户名, TOROW(REPT(用户区域, 每组数量)),
    生成数据行, INDEX(数据区域, INT((SEQUENCE(用户数量*每组数量)-1)/每组数量)+1, MOD(SEQUENCE(用户数量*每组数量)-1, 每组数量)*3+SEQUENCE(1,3)),
    HSTACK(生成用户名, 生成数据行)
)

公式逻辑:

  • 用REPT重复每个用户两次,TOROW转成单行后作为结果的用户名列
  • 用SEQUENCE生成总行数序列,通过INT和MOD计算每个结果行对应的原始数据行和列偏移,再用INDEX提取对应数据
  • 最后用HSTACK把用户名和数据合并成完整表格

二、Power Query可视化操作(所有Excel版本通用)

操作步骤直观,无需编写复杂公式:

  1. 选中原始数据区域,点击「数据」选项卡→「从表格/区域」(勾选「我的表格有标题」),进入Power Query编辑器
  2. 添加自定义列:点击「添加列」→「自定义列」,输入公式= {[B, C, D], [E, F, G]},点击确定。此时每行会生成一个包含两个数据组的列表集合
  3. 展开自定义列:点击自定义列右侧的「展开」按钮→选择「到新行」,把每个用户的两组数据拆成两行
  4. 再次展开列表:点击展开后列右侧的「展开」按钮→选择「到新列」,将列表拆分为B、C、D三列
  5. 清理冗余列:选中原来的B-G列,右键→「删除」,调整列顺序为A、B、C、D
  6. 点击「关闭并上载」,结果会自动导入到新工作表

三、旧版Excel数组公式解法(无动态数组功能版本)

如果你的Excel不支持动态数组,用以下公式下拉填充:

  • 用户名列(A6开始):=INDEX($A$2:$A$3,INT((ROW(A1)-1)/2)+1),下拉到需要的行数
  • B列(B6开始):=INDEX($B$2:$G$3,INT((ROW(A1)-1)/2)+1,MOD(ROW(A1)-1,2)*3+1),下拉
  • C列(C6开始):=INDEX($B$2:$G$3,INT((ROW(A1)-1)/2)+1,MOD(ROW(A1)-1,2)*3+2),下拉
  • D列(D6开始):=INDEX($B$2:$G$3,INT((ROW(A1)-1)/2)+1,MOD(ROW(A1)-1,2)*3+3),下拉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:10:58