You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将按月分栏的财务数据转换为Excel规范表格(求公式或Power Query/M查询方案)

如何将按月分栏的财务数据转换为Excel规范表格(求公式或Power Query/M查询方案)

嗨,我帮你整理了两种实用方案,不管是用Excel公式还是Power Query都能实现你要的表格转换,咱们一步步来:

先明确需求场景

  • 原始表格:左侧有10列固定参考信息(如ID、客户名称等),右侧按月份划分区块,每个月份下包含4列数据指标(如收入、支出等),属于典型的宽表结构。
  • 目标表格:转换为长表格式,每一行对应一条明细记录——保留10列参考信息,新增「月份」「指标类型」「数值」三列,每个月份的4列数据拆分为4行,对应相同的参考信息。

方案一:Excel公式法(适合临时处理小数据量)

假设你的原始数据从A1单元格开始,参考列为A-J列,数据列从K列起,每个月占4列(比如K-N是1月、O-R是2月,共3个月),原始数据总行数为10行(A2-A11)。

在新工作表中按以下步骤输入公式(记得根据你的实际数据调整参数):

  1. 填充重复的参考信息
    新表A2单元格输入公式,横向拖动到J列,再纵向拖动到所有行:

    =INDEX($A$2:$A$11,ROUNDUP(ROW(A1)/(4*3),0))
    

    (参数说明:4是每个月的列数,3是总月份数,$A$2:$A$11是原始参考列的数据源)

  2. 填充月份
    新表K2单元格输入公式,纵向拖动:

    =CHOOSE(ROUNDUP(ROW(A1)/4,0),"1月","2月","3月")
    

    (参数说明:"1月","2月","3月"替换为你实际的月份名称,顺序要和原始表格一致)

  3. 填充指标类型
    新表L2单元格输入公式,纵向拖动:

    =CHOOSE(MOD(ROW(A1)-1,4)+1,"收入","支出","利润","税费")
    

    (参数说明:"收入","支出","利润","税费"替换为你原始表格中每个月4列的指标名称)

  4. 填充对应数值
    新表M2单元格输入公式,纵向拖动:

    =INDEX($K$2:$V$11,ROUNDUP(ROW(A1)/(4*3),0),MOD(ROW(A1)-1,4)+1+(ROUNDUP(ROW(A1)/4,0)-1)*4)
    

    (参数说明:$K$2:$V$11是原始数据列的区域,其他参数和前面保持一致)


方案二:Power Query/M查询法(适合批量/重复处理,更稳定)

这个方法可视化操作,还能一键刷新更新数据,推荐优先使用:

可视化操作步骤

  1. 选中原始数据的任意单元格,点击「数据」选项卡 → 「从表格/区域」,勾选「我的表格有标题」,进入Power Query编辑器。
  2. 选中左侧10列参考信息(比如A-J列),点击「转换」选项卡 → 「逆透视列」 → 「逆透视其他列」。这一步会把所有月份的指标列转成「属性」和「值」两列。
  3. 选中「属性」列(内容类似「1月-收入」),点击「转换」选项卡 → 「拆分列」 → 「按分隔符」,选择你实际的分隔符(比如「-」),拆分为「月份」和「指标类型」两列。
  4. 重命名拆分后的列,调整列的顺序(把「月份」「指标类型」「值」放到合适位置),最后点击「关闭并上载」,就能得到你要的规范表格了。

对应的M查询代码(可直接粘贴到Power Query高级编辑器)

记得把代码中的列名替换成你实际的参考列名称:

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    // 逆透视非参考列,生成属性和值列
    逆透视其他列 = Table.UnpivotOtherColumns(源, {"ID", "客户名称", "列3", "列4", "列5", "列6", "列7", "列8", "列9", "列10"}, "属性", "值"),
    // 拆分属性列为月份和指标类型
    拆分列按分隔符 = Table.SplitColumn(逆透视其他列, "属性", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"月份", "指标类型"}),
    // 调整列的数据类型(比如数值设为货币型)
    更改类型 = Table.TransformColumnTypes(拆分列按分隔符,{{"月份", type text}, {"指标类型", type text}, {"值", Currency.Type}}),
    // 重新排列列的顺序
    重新排列列 = Table.ReorderColumns(更改类型,{"ID", "客户名称", "列3", "列4", "列5", "列6", "列7", "列8", "列9", "列10", "月份", "指标类型", "值"})
in
    重新排列列

要是你后续数据更新了,只需要右键点击转换后的表格,选择「刷新」就能自动更新结果,非常方便~

备注:内容来源于stack exchange,提问作者user1605665

火山引擎 最新活动