Excel中无需Pivot,将世界银行宽格式数据重排为三列长格式
在Excel中将宽表转成Country/Year/Data长表的最优方法
方法1:Power Query(推荐,自动化无公式)
这是处理这类格式转换的最优方案,操作简单且可复用:
- 选中包含国家列和所有年份列的完整数据区域,点击「数据」选项卡 → 「从表格/区域」,确认勾选「我的表格有标题」,进入Power Query编辑器
- 在编辑器里,选中所有年份列(即除国家列外的所有列)
- 点击「转换」选项卡 → 「逆透视列」→ 「逆透视其他列」
- 此时生成的「属性」列对应年份,「值」列对应数据,右键重命名这两列为
Year和Data - 点击「关闭并上载」,选择上载到新工作表,直接得到目标三列表格
方法2:公式法(适合小数据集手动处理)
如果不想用Power Query,可通过公式批量生成Country和Year列:
假设原数据A列为国家,B列到Z列为2000-2024年的数据:
- Country列:在新工作表A2单元格输入公式,下拉填充至足够行数(国家总数×年份数):
=INDEX(原数据!$A:$A,INT((ROW()-2)/COLUMNS(原数据!$B:$Z))+1) - Year列:在B2单元格输入公式,下拉填充:
=INDEX(原数据!$B$1:$Z$1,MOD(ROW()-2,COLUMNS(原数据!$B:$Z))+1) - Data列:在C2单元格输入公式,下拉填充:
(Excel 365/2021用户可简化:Country列用=INDEX(原数据!$B:$Z,INT((ROW()-2)/COLUMNS(原数据!$B:$Z))+1,MOD(ROW()-2,COLUMNS(原数据!$B:$Z))+1)TOCOL(原数据!$A$2:$A$100,REPT,COLUMNS(原数据!$B:$Z)))
方法3:VBA宏(适合批量重复处理)
若需频繁转换同类数据,可编写宏实现一键处理:
按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:
Sub ReshapeWorldBankData() Dim srcSheet As Worksheet, destSheet As Worksheet Dim lastRow As Long, lastCol As Long, i As Long, j As Long, destRow As Long Set srcSheet = ThisWorkbook.Sheets("原数据") '替换为你的原数据工作表名 Set destSheet = ThisWorkbook.Sheets.Add destSheet.Name = "转换后数据" '写入表头 destSheet.Range("A1:C1") = Array("Country", "Year", "Data") 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, "A") = srcSheet.Cells(i, "A") destSheet.Cells(destRow, "B") = srcSheet.Cells(1, j) destSheet.Cells(destRow, "C") = srcSheet.Cells(i, j) destRow = destRow + 1 Next j Next i End Sub
修改代码中原数据为你的实际工作表名,运行宏即可生成转换后的表格
内容的提问来源于stack exchange,提问作者Wage Slave
相关产品推荐
相关产品推荐

