You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中WIND终端宽格式数据转面板数据快速方法咨询

Excel 中将宽格式时间序列数据转换为面板数据的快速方法

你需要把WIND导出的宽格式公司数据(每行对应一家公司,列对应各年份净利润增速)转换成面板数据(每行对应一家公司的单一年度数据),以下是Excel里的三种高效方法:

方法1:Power Query(推荐,无代码批量处理)

这是最适合批量处理的方案,无需手动公式或编程:

  • 选中包含表头的全部数据区域,点击「数据」选项卡 → 「从表格/区域」,勾选「我的表格有标题」后进入Power Query编辑器
  • 选中Ticker和Company Name列,右键点击 → 「逆透视其他列」,此时原年份列会被转成「属性」(年份字段名)和「值」(增速数据)两列
  • 提取年份:选中「属性」列,点击「转换」→ 「提取」→ 「文本范围」,设置起始位置为16(因为NetProfitGrowth是15个字符,后面的4位就是年份),长度4,得到纯年份数字
  • 重命名列:将「值」改为Net Profit Growth,提取出的年份列改为Year
  • 点击「关闭并上载」,转换后的面板数据会自动导入新工作表

方法2:动态数组公式(适合熟悉Excel公式的用户)

如果使用Excel 365或2021,可通过动态数组快速生成结果:
假设源数据在Sheet1的A1:Q348区域(A=Ticker,B=Company Name,C-Q对应15个年份的增速):

  1. 新建工作表,在A1:D1输入表头:Ticker、Company、Year、Net Profit Growth
  2. 在A2输入公式并下拉至第347*15+1行:
    =INDEX(Sheet1!$A$2:$A$348,INT((ROW()-2)/15)+1)
    
  3. B2输入对应公式并下拉:
    =INDEX(Sheet1!$B$2:$B$348,INT((ROW()-2)/15)+1)
    
  4. C2输入公式生成年份序列并下拉:
    =INDEX(RIGHT(Sheet1!$C$1:$Q$1,4),MOD(ROW()-2,15)+1)
    
  5. D2输入公式提取对应增速并下拉:
    =INDEX(Sheet1!$C$2:$Q$348,INT((ROW()-2)/15)+1,MOD(ROW()-2,15)+1)
    

方法3:VBA宏(适合有编程基础的用户)

通过宏实现完全自动化转换:

  • 按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:
    Sub ConvertToPanelData()
        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("Sheet1")
        Set destSheet = ThisWorkbook.Sheets.Add
        destSheet.Name = "PanelData"
        
        '写入表头
        destSheet.Cells(1, 1) = "Ticker"
        destSheet.Cells(1, 2) = "Company"
        destSheet.Cells(1, 3) = "Year"
        destSheet.Cells(1, 4) = "Net Profit Growth"
        
        lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row
        lastCol = srcSheet.Cells(1, srcSheet.Columns.Count).End(xlToLeft).Column
        destRow = 2
        
        '遍历每家公司和对应年份
        For i = 2 To lastRow
            For j = 3 To lastCol
                destSheet.Cells(destRow, 1) = srcSheet.Cells(i, 1)
                destSheet.Cells(destRow, 2) = srcSheet.Cells(i, 2)
                '从列标题末尾提取4位年份
                destSheet.Cells(destRow, 3) = Right(srcSheet.Cells(1, j), 4)
                destSheet.Cells(destRow, 4) = srcSheet.Cells(i, j)
                destRow = destRow + 1
            Next j
        Next i
        
        '自动调整列宽
        destSheet.Columns.AutoFit
    End Sub
    
  • 修改代码中的Sheet1为你的源数据工作表名,运行宏即可生成面板数据

内容的提问来源于stack exchange,提问作者Kirill Vengerov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:23:15