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

如何在Google Sheets中将多年份收入列垂直堆叠转换格式?

解决Google Sheets宽表转长表(年份列转行)的方案

针对你需要将包含项目名称、用户邮箱及15年收入的宽表转换为名称、邮箱、年份、收入的长表需求,以下是两种直接可用的公式方案:

方案1:使用ARRAYFORMULA+FLATTEN+TRANSPOSE(兼容所有Google Sheets版本)

假设你的数据结构如下:

  • A列:项目名称(表头A1)
  • B列:用户邮箱(表头B1)
  • C-P列:Year 1到Year 15的收入(表头C1:P1)
  • 数据从第2行开始(A2:P为有效数据区域)

在空白单元格(比如Q1)输入以下公式:

=ARRAYFORMULA(
  QUERY(
    {
      FLATTEN(A2:A),
      FLATTEN(B2:B),
      FLATTEN(TRANSPOSE(C1:P1)),
      FLATTEN(TRANSPOSE(C2:P))
    },
    "SELECT Col1, Col2, Col3, Col4 WHERE Col4 IS NOT NULL",
    0
  )
)

公式说明:

  • FLATTEN(A2:A):将项目名称列重复15次(对应每一年),生成纵向的项目名称列表
  • FLATTEN(B2:B):同理生成纵向的用户邮箱列表,与项目名称一一对应
  • FLATTEN(TRANSPOSE(C1:P1)):将年份表头从横向转为纵向,生成连续的年份序列
  • FLATTEN(TRANSPOSE(C2:P)):将15年的收入数据从横向转为纵向,与年份、项目/邮箱匹配
  • QUERY函数:过滤掉收入为空的无效行,确保数据整洁

方案2:使用LET+MAP(新版Google Sheets推荐,更灵活)

如果你的Google Sheets支持LAMBDA系列函数,可使用更易维护的公式:

=LET(
  nameCol, A2:A,
  emailCol, B2:B,
  yearHeaders, C1:P1,
  incomeData, C2:P,
  numYears, COLUMNS(yearHeaders),
  FLATTEN(
    MAP(nameCol, emailCol, incomeData, LAMBDA(n, e, inc,
      HSTACK(
        REPT(n&"|", numYears),
        REPT(e&"|", numYears),
        yearHeaders&"|",
        inc
      )
    ))
  )
)

输入后,在旁边单元格用=SPLIT(上述公式输出单元格, "|")拆分,即可得到四列规整数据。

调整提示:

如果你的年份列不是C-P,只需修改公式中的C1:P1(年份表头)和C2:P(收入数据)为实际区域即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:43