如何用原生Excel实现单条多字段电影放映记录转多行?
原生Excel转换宽表为窄表的解决方案
针对你需要将一行多组放映时间/影院数据拆分为单行对应单组数据的需求,以下是两种原生Excel的实现方法:
方法一:Power Query(高效适合大量数据)
Power Query是Excel自带的数据处理工具,几百行数据处理起来非常快:
- 选中原始数据所在的单元格区域,点击顶部菜单栏「数据」→「从表格/区域」,确认弹窗里「我的表格有标题」已勾选,点击「确定」进入Power Query编辑器。
- 在编辑器中,选中
name列(第一列),右键选择「逆透视其他列」,此时表格会变成三列:name、Attribute(原列名,如time1、theater1)、Value(对应单元格的值)。 - 选中
Attribute列,点击「转换」→「拆分列」→「按数字拆分」,将列拆分为两部分:比如time1会拆成time和1,theater1拆成theater和1。 - 选中拆分后得到的数字列(比如叫
Attribute.2)和name列,点击「转换」→「透视列」,在弹窗中:- 「值列」选择
Value - 「透视列」选择拆分后的属性列(比如
Attribute.1) - 「聚合函数」选择「不要聚合」,点击确定。
- 「值列」选择
- 此时表格已经变成
name、time、theater的结构,删除多余的数字列,调整列顺序后,点击「关闭并上载」,结果就会导入到新的工作表中。
方法二:公式法(无需启用Power Query)
如果不想用Power Query,可以用INDEX函数配合行号计算实现:
假设原始数据从A1开始,A列是name,B/C是第一组time/theater,D/E是第二组,F/G是第三组,要在I列开始输出结果:
- I1、J1、K1分别输入
name、time、theater作为表头。 - I2单元格输入公式:
下拉公式直到出现错误值(表示已处理完所有数据)。这里的=INDEX($A$2:$A$1000,INT((ROW()-2)/3)+1)3对应原始数据里的组数,如果你有更多组,把3改成对应的数量。 - J2单元格输入公式:
下拉填充。=INDEX($B$2:$F$1000,INT((ROW()-2)/3)+1,MOD(ROW()-2,3)*2+1) - K2单元格输入公式:
下拉填充。=INDEX($C$2:$G$1000,INT((ROW()-2)/3)+1,MOD(ROW()-2,3)*2+1)
公式说明:INT((ROW()-2)/3)+1用来定位原始数据的行号,MOD(ROW()-2,3)*2+1用来定位每组对应的time/theater列号。
内容的提问来源于stack exchange,提问作者hide1nbush
相关产品推荐
相关产品推荐

