Excel数据表重塑需求:将多人员列转换为Name与On/Off行记录
Excel数据表重塑需求:将多人员列转换为Name与On/Off行记录
看起来你需要把Excel里的宽格式数据表转成长格式数据表——也就是把原来按人员拆分的列,重新整理成每一行对应一个人员的单日上班状态记录对吧?我来给你说几个简单的实现方法,先理清楚你的数据情况:
原数据表(宽格式)
| Date | Bob | Joe | Jane |
|---|---|---|---|
| 1/1/2025 | 0 | 0 | 0 |
| 1/2/2025 | 1 | 1 | 1 |
| 1/3/2025 | 1 | 1 | 1 |
目标数据表(长格式,已修正你示例中的对应错误)
| Date | Name | On/Off |
|---|---|---|
| 1/1/2025 | Bob | 0 |
| 1/2/2025 | Bob | 1 |
| 1/3/2025 | Bob | 1 |
| 1/1/2025 | Joe | 0 |
| 1/2/2025 | Joe | 1 |
| 1/3/2025 | Joe | 1 |
| 1/1/2025 | Jane | 0 |
| 1/2/2025 | Jane | 1 |
| 1/3/2025 | Jane | 1 |
最推荐的方法:用Excel Power Query(一键逆透视,无公式)
这是最省心的方法,适合所有有Power Query的Excel版本(2016及以后自带,2010/2013可以装插件):
- 选中你的原数据表(包含表头),点击顶部菜单栏的数据选项卡,选择从表格/区域,确认“我的表格有标题”后进入Power Query编辑器。
- 按住
Ctrl键选中Bob、Joe、Jane这三列(所有人员列)。 - 切换到转换选项卡,点击逆透视列(如果找不到,就在“任意列”的下拉菜单里找)。
- 现在列名会变成
Date、Attribute、Value,我们重命名成你要的:- 右键点击
Attribute列 → 重命名 → 改成Name - 右键点击
Value列 → 重命名 → 改成On/Off
- 右键点击
- 最后点击关闭并上载,转换好的长格式表就会自动出现在新工作表里啦!
备选方法:用公式实现(适合旧版Excel)
如果你的Excel没有Power Query,可以用组合公式来生成记录:
- 在新的工作表中,A2单元格输入公式(生成Date列):
(这里的=INDEX(原表!$A$2:$A$4,INT((ROW()-2)/3)+1)3是人员数量,如果你有更多人员就改这个数;原表!$A$2:$A$4是原表的Date列数据范围) - B2单元格输入公式(生成Name列):
(=CHOOSE(MOD(ROW()-2,3)+1,"Bob","Joe","Jane")3同样是人员数量,后面的人名按原表头顺序排列) - C2单元格输入公式(生成On/Off列):
(=INDEX(原表!$B$2:$D$4,INT((ROW()-2)/3)+1,MOD(ROW()-2,3)+1)原表!$B$2:$D$4是原表中所有人员的数值范围) - 选中A2:C2,下拉填充直到出现重复的空值,就得到你要的所有记录了!
备注:内容来源于stack exchange,提问作者Tracy Wilson




