You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel数据表重塑需求:将多人员列转换为Name与On/Off行记录

Excel数据表重塑需求:将多人员列转换为Name与On/Off行记录

看起来你需要把Excel里的宽格式数据表转成长格式数据表——也就是把原来按人员拆分的列,重新整理成每一行对应一个人员的单日上班状态记录对吧?我来给你说几个简单的实现方法,先理清楚你的数据情况:

原数据表(宽格式)

DateBobJoeJane
1/1/2025000
1/2/2025111
1/3/2025111

目标数据表(长格式,已修正你示例中的对应错误)

DateNameOn/Off
1/1/2025Bob0
1/2/2025Bob1
1/3/2025Bob1
1/1/2025Joe0
1/2/2025Joe1
1/3/2025Joe1
1/1/2025Jane0
1/2/2025Jane1
1/3/2025Jane1

最推荐的方法:用Excel Power Query(一键逆透视,无公式)

这是最省心的方法,适合所有有Power Query的Excel版本(2016及以后自带,2010/2013可以装插件):

  1. 选中你的原数据表(包含表头),点击顶部菜单栏的数据选项卡,选择从表格/区域,确认“我的表格有标题”后进入Power Query编辑器。
  2. 按住Ctrl键选中Bob、Joe、Jane这三列(所有人员列)。
  3. 切换到转换选项卡,点击逆透视列(如果找不到,就在“任意列”的下拉菜单里找)。
  4. 现在列名会变成DateAttributeValue,我们重命名成你要的:
    • 右键点击Attribute列 → 重命名 → 改成Name
    • 右键点击Value列 → 重命名 → 改成On/Off
  5. 最后点击关闭并上载,转换好的长格式表就会自动出现在新工作表里啦!

备选方法:用公式实现(适合旧版Excel)

如果你的Excel没有Power Query,可以用组合公式来生成记录:

  1. 在新的工作表中,A2单元格输入公式(生成Date列):
    =INDEX(原表!$A$2:$A$4,INT((ROW()-2)/3)+1)
    
    (这里的3是人员数量,如果你有更多人员就改这个数;原表!$A$2:$A$4是原表的Date列数据范围)
  2. B2单元格输入公式(生成Name列):
    =CHOOSE(MOD(ROW()-2,3)+1,"Bob","Joe","Jane")
    
    3同样是人员数量,后面的人名按原表头顺序排列)
  3. C2单元格输入公式(生成On/Off列):
    =INDEX(原表!$B$2:$D$4,INT((ROW()-2)/3)+1,MOD(ROW()-2,3)+1)
    
    原表!$B$2:$D$4是原表中所有人员的数值范围)
  4. 选中A2:C2,下拉填充直到出现重复的空值,就得到你要的所有记录了!

备注:内容来源于stack exchange,提问作者Tracy Wilson

火山引擎 最新活动