如何对含列组的数据表执行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版本通用)
操作步骤直观,无需编写复杂公式:
- 选中原始数据区域,点击「数据」选项卡→「从表格/区域」(勾选「我的表格有标题」),进入Power Query编辑器
- 添加自定义列:点击「添加列」→「自定义列」,输入公式
= {[B, C, D], [E, F, G]},点击确定。此时每行会生成一个包含两个数据组的列表集合 - 展开自定义列:点击自定义列右侧的「展开」按钮→选择「到新行」,把每个用户的两组数据拆成两行
- 再次展开列表:点击展开后列右侧的「展开」按钮→选择「到新列」,将列表拆分为B、C、D三列
- 清理冗余列:选中原来的B-G列,右键→「删除」,调整列顺序为A、B、C、D
- 点击「关闭并上载」,结果会自动导入到新工作表
三、旧版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
相关产品推荐
相关产品推荐

