如何将Google Sheets一行多权重数据拆分为单行单权重格式?
解决Google Sheets表格转置(Unpivot)问题
假设你的原始数据结构是:
- A列:日期
- B~N列:各权重列(比如权重1、权重2...)
- O列及以后:冗余数据(可忽略)
可以用以下公式实现一行转多行的格式转换(每行仅含日期+单个权重):
=ARRAYFORMULA(QUERY(SPLIT(FLATTEN(A2:A&"|"&B2:N), "|"), "where Col2 is not null", 0))
公式说明:
FLATTEN(A2:A&"|"&B2:N):把每一行的日期和对应权重用分隔符|拼接后,将所有结果平铺成一列。比如原行2024/1/1 | 0.5 | 0.8会拆分成2024/1/1|0.5、2024/1/1|0.8两条独立数据。SPLIT(..., "|"):把拼接后的字符串按|拆分回两列(日期列和权重列)。QUERY(..., "where Col2 is not null", 0):过滤掉权重为空的行,避免无效数据。
进阶处理(保留指定冗余列):
如果需要保留部分冗余列(比如C列是项目名称),可以调整公式为:
=ARRAYFORMULA(QUERY(SPLIT(FLATTEN(A2:A&"|"&C2:C&"|"&D2:F), "|"), "where Col3 is not null", 0))
这里把日期、项目名称、权重列拼接后拆分,最终得到每行日期+项目名称+单个权重的结构。
替代方案(新版Google Sheets专属):
如果你的Google Sheets支持TOCOL函数,也可以用更简洁的写法:
=ARRAYFORMULA({TOCOL(A2:A,1), TOCOL(B2:N,1)})
TOCOL(A2:A,1):把日期列重复对应次数(等于权重列的数量)并忽略空值。TOCOL(B2:N,1):把所有权重列平铺成一列并忽略空值。- 用
{}组合两列,直接生成目标结构。
注意:如果原数据存在空行,可根据实际行数调整公式中的范围(比如A2:A改成A2:A1000)。
内容的提问来源于stack exchange,提问作者user3424481
相关产品推荐
相关产品推荐

