Google 工作表公式将列标题转为行

Google sheets formula transposing column title to row

附上我的问题link

我想这样转置数据。

我的原始数据可能有几千行。

我的想法是把我的专栏标题做成同样数量的表格,然后把四个表格合二为一。我的想法也在 google sheet 上。它可能会起作用,但我想要一个更好的解决方案。

A picture of my question

尝试

=query(arrayformula(split(flatten({(A3:A4&"♦"&B3:B4&"♦"&C3:E4)}),"♦")),"select * where Col3 is not null")

说明

  • 第一步:=arrayformula(A3:A4&"♦"&B3:B4&"♦"&C3:E4)

  • step2: =arrayformula(flatten(A3:A4&"♦"&B3:B4&"♦"&C3:E4)) , flatten 会将所有数据放在一个列中 flatten()

  • 第三步:=query(arrayformula(split(flatten({(A3:A4&"♦"&B3:B4&"♦"&C3:E4)}),"♦")),"select * where Col3 is not null")

在发现 FLATTEN() 函数后的过去几年里,我已经回答了数百次这个问题,我决定为 Google AppsScript 编写一个自定义函数来完成它。虽然在某种意义上,自定义函数比 SPLIT(FLATTEN( 公式化的解决方案更不透明,你会在过去几年的论坛中找到它,但它至少更容易被用户理解。

在您共享的 sheet 中有一个名为 MKHelp.gs 的新脚本文件。在里面,你会发现the code that I wrote构造了“UNPIVOT()”函数。

在 sheet 的新选项卡上,您会在名为 MK.Help 的选项卡中找到此公式。

=QUERY(UNPIVOT(A2:B,"V",C2:E,"B",C1:E1,"H"),"where Col3 is not null")

要使 unpivot 正常工作,最好用 query() 包围它以清除不必要的行。在您的情况下,“金额”不是“空”或“空”。

每个范围后面的字母“V”、“H”或“B”描述了输入数据的“形状”。无论是“垂直”、“水平”还是“两者”。