Google Sheets列转行:日期列数据转行式结构技术求助
Google Sheets 多日期列宽表转长表解决方案
针对ClusterID为行、日期(格式Pos. 2024-01-01)为列的宽表,要转换为每行对应ClusterID、Position、Date、数值的长表结构,用以下公式即可批量处理,无需手动处理大量列:
简化版公式(Position固定为Pos.时)
=ARRAYFORMULA( QUERY( FLATTEN( A2:A&"|Pos.|"®EXREPLACE(B1:1, "Pos. ", "")&"|"&B2:Z ), "SELECT Col1, Col2, Col3, Col4 WHERE Col4 IS NOT NULL", 0 ) )
通用版公式(Position不固定时)
如果表头里的前缀(如Pos.)有变化,用这个适配不同前缀的版本:
=ARRAYFORMULA( LET( cluster_range, A2:A, header_range, B1:1, value_range, B2:Z, header_parts, BYCOL(header_range, LAMBDA(col, SPLIT(col, " "))), positions, INDEX(header_parts, 1, ), dates, INDEX(header_parts, 2, ), combined, BYROW(cluster_range, LAMBDA(cluster, BYCOL(SEQUENCE(1, COLUMNS(value_range)), LAMBDA(col_idx, cluster&"|"&INDEX(positions, col_idx)&"|"&INDEX(dates, col_idx)&"|"&INDEX(value_range, ROW(cluster)-ROW(cluster_range)+1, col_idx) )) )), flat_data, FLATTEN(combined), split_data, SPLIT(flat_data, "|"), QUERY(split_data, "SELECT Col1, Col2, Col3, Col4 WHERE Col4 IS NOT NULL", 0) ) )
使用说明
- 把公式粘贴到空白单元格(比如新工作表的A1)
- 根据实际数据范围调整公式里的区域:
A2:A:ClusterID所在列(从第二行数据行开始)B1:1:日期表头所在行B2:Z:数值数据所在区域,若列数更多,把Z改成最后一列的列标(如ZZ)
- 公式会自动扁平化所有列数据,拆分出Position和Date,过滤空值后输出长表结构
内容的提问来源于stack exchange,提问作者Anatoly Gorbatov
相关产品推荐
相关产品推荐

