如何在Excel中高效实现带层级列标题表格的Unpivot操作?
问题描述
我被这个问题困扰快一周了,不太会用Excel公式,一直在尝试用查询解决问题。附上当前的表格和期望的目标表格,有没有更简单的实现方法?提前感谢,期待任何建议。
当前样本表格
| City | LA | LA | New York | New York | Aukland | Aukland |
|---|---|---|---|---|---|---|
| Time of Day / Date | Day | Night | Day | Night | Day | Night |
| 2022-08-01 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-02 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-03 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-04 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-05 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-06 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-07 | 30 | 15 | 25 | 10 | 20 | 5 |
| 2022-08-08 | 30 | 15 | 25 | 10 | 20 | 5 |
目标表格(推测结构)
| Date | City | Time of Day | Value |
|---|---|---|---|
| 2022-08-01 | LA | Day | 30 |
| 2022-08-01 | LA | Night | 15 |
| 2022-08-01 | New York | Day | 25 |
| 2022-08-01 | New York | Night | 10 |
| 2022-08-01 | Aukland | Day | 20 |
| 2022-08-01 | Aukland | Night | 5 |
| ... | ... | ... | ... |
简便实现方法
方法1:Power Query(推荐,无复杂公式)
这是批量处理最省心的方式,步骤如下:
- 选中原始数据区域(包含两行表头和所有日期行),点击数据选项卡 → 从表格/区域,勾选「我的表格有标题」,进入Power Query编辑器。
- 选中前两行(表头行),点击转换 → 合并列,选择分隔符为
-,新列名设为City-Time。 - 点击转换 → 将第一行用作标题,此时列标题变为
City、LA-Day、LA-Night等。 - 选中第一列(原日期列),点击逆透视列 → 逆透视其他列,生成
Attribute和Value列。 - 选中
Attribute列,点击转换 → 拆分列 → 按分隔符,选择-,拆分出City和Time of Day两列。 - 调整列顺序为:
Date(原第一列)、City、Time of Day、Value。 - 点击关闭并上载,即可得到目标格式的表格。
方法2:公式法(适合少量数据)
如果不想用Power Query,可直接用公式批量提取:
假设原始数据在A1:G9区域(A1=City,A2=Time of Day/Date,A3:A9为日期):
- 在新表格中设置表头:A1=Date,B1=City,C1=Time of Day,D1=Value。
- 在A2输入公式:
=INDEX($A$3:$A$9,INT((ROW()-2)/6)+1) - 在B2输入公式:
=INDEX({"LA","LA","New York","New York","Aukland","Aukland"},MOD(ROW()-2,6)+1) - 在C2输入公式:
=INDEX({"Day","Night","Day","Night","Day","Night"},MOD(ROW()-2,6)+1) - 在D2输入公式:
=INDEX($B$3:$G$9,INT((ROW()-2)/6)+1,MOD(ROW()-2,6)+1) - 选中A2:D2,下拉填充至所有数据行即可。
内容的提问来源于stack exchange,提问作者MikeSmith
相关产品推荐
相关产品推荐

