Excel如何将含多学科成绩的单行数据转换为Name相同的多行格式
Excel宽表转长表操作方案
你需要把「每人一行、多科目并列」的宽表转换为「每人每科目一行」的长表,可根据你的使用场景选择以下任意一种方法:
方法1:Power Query 自动转换(推荐,适配大量数据)
适合Excel 2016及以上版本、WPS 2019及以上版本,无需写公式:
- 选中原始数据区域,点击顶部菜单栏「数据」→ 「从表格/区域」,弹窗确认数据包含表头后点击确定,进入Power Query编辑器
- 按住Ctrl选中所有非Name列,右键点击「取消透视列」;或直接选中Name列右键点击「取消透视其他列」
- 此时生成「属性」「值」两列新数据,选中「属性」列,点击顶部「转换」→「拆分列」→「按分隔符」,分隔符选择空格,拆分位置选「最右侧的分隔符」
- 拆分后得到「属性.1」「属性.2」两列,选中「属性.1」列,点击「转换」→「透视列」,值列选择「值」,聚合方式选「不要聚合」
- 删除多余的序号列,仅保留Name、Subject、Mark三列后,点击「关闭并上载」即可把转换后的数据导出到Excel工作表
方法2:手动转换(适合少量数据)
如果你的数据行数不超过100行,可直接手动操作:
- 在空白区域先建好新表头:
Name、Subject、Mark - 把原始表的Name列复制N次(N为每人对应的科目数量,本例中N=2),粘贴到新表的Name列
- 把原始表的
Subject 1列复制到新表Subject列前半段,Subject 2列复制到新表Subject列后半段 - 把原始表的
Mark 1列复制到新表Mark列前半段,Mark 2列复制到新表Mark列后半段即可
方法3:公式自动生成
假设原始数据存放在Sheet1的A1:E100区域(A列为Name,B列为Subject 1,C列为Mark 1,D列为Subject 2,E列为Mark 2):
- 新表A2(Name列第一行数据)输入公式:
=INDEX(Sheet1!$A$2:$A$100,INT((ROW(A1)-1)/2)+1) - 新表B2(Subject列第一行数据)输入公式:
=IF(MOD(ROW(A1),2)=1,INDEX(Sheet1!$B$2:$B$100,INT((ROW(A1)-1)/2)+1),INDEX(Sheet1!$D$2:$D$100,INT((ROW(A1)-1)/2)+1)) - 新表C2(Mark列第一行数据)输入公式:
=IF(MOD(ROW(A1),2)=1,INDEX(Sheet1!$C$2:$C$100,INT((ROW(A1)-1)/2)+1),INDEX(Sheet1!$E$2:$E$100,INT((ROW(A1)-1)/2)+1)) - 选中三行公式下拉填充,即可自动生成所有转换后的数据
内容的提问来源于stack exchange,提问作者Sindhu B
相关产品推荐
相关产品推荐

