Excel格式转换:将宽表型半小时能耗数据转为两列结构化数据
将Excel宽表型半小时能耗数据转换为长表的方法
方法一:Power Query(推荐,适配整年大规模数据)
这是处理全年数据最高效的方案,操作步骤如下:
- 选中包含表头的原始数据区域,切换到「数据」选项卡,点击「从表格/区域」,勾选「我的表格有标题」后进入Power Query编辑器。
- 选中
HH Date列,在「转换」选项卡中选择「逆透视列」→「逆透视其他列」。此时原时段列会拆分为「属性」(存储时段)和「值」(存储能耗)两列。 - 重命名列:右键「属性」列改为
Time,右键「值」列改为Energy (KWH)。 - 添加
Date Time列:点击「添加列」→「自定义列」,输入公式:
重命名该列为= [HH Date] & " - " & [Time]Date Time。 - 调整列顺序:将
Date Time拖到第一列,Energy (KWH)拖到第二列,删除多余的HH Date和Time列。 - 点击「关闭并上载」,导出处理好的数据到新工作表。
方法二:公式法(仅适合小批量数据,不推荐全年数据)
假设原始数据中HH Date在A列,时段列从B列开始:
- 在新工作表A1输入
Date Time,B1输入Energy (KWH)。 - A2单元格公式(需手动列出所有48个半小时时段):
=INDEX(原始数据!$A:$A,INT((ROW()-2)/48)+2) & " - " & INDEX({"0:00","0:30","1:00","1:30",..."23:30"},MOD(ROW()-2,48)+1) - B2单元格公式($BH为第48个时段列的列标,按需调整):
=INDEX(原始数据!$B:$BH,INT((ROW()-2)/48)+2,MOD(ROW()-2,48)+1) - 选中A2:B2下拉填充至17520行(365×48)。
方法三:VBA脚本自动处理
按下Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:
Sub ConvertEnergyData() Dim srcSheet As Worksheet, destSheet As Worksheet Dim lastRow As Long, lastCol As Long Dim i As Long, j As Long, destRow As Long ' 替换为你的原始数据工作表名 Set srcSheet = ThisWorkbook.Sheets("原始数据") Set destSheet = ThisWorkbook.Sheets.Add destSheet.Name = "转换后数据" ' 写入表头 destSheet.Cells(1, 1).Value = "Date Time" destSheet.Cells(1, 2).Value = "Energy (KWH)" destRow = 2 ' 获取原始数据范围 lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row lastCol = srcSheet.Cells(1, srcSheet.Columns.Count).End(xlToLeft).Column ' 遍历转换数据 For i = 2 To lastRow For j = 2 To lastCol destSheet.Cells(destRow, 1).Value = srcSheet.Cells(i, 1).Value & " - " & srcSheet.Cells(1, j).Value destSheet.Cells(destRow, 2).Value = srcSheet.Cells(i, j).Value destRow = destRow + 1 Next j Next i ' 自动调整列宽 destSheet.Columns("A:B").AutoFit MsgBox "数据转换完成!" End Sub
修改代码中"原始数据"为实际工作表名,运行脚本即可自动生成目标格式数据。
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

