如何用Excel公式压缩表格:合并单日多单元格数据至单个单元格
需求与问题
- 核心需求:将输入表格中同一天+同DO列的所有数据合并到输出表格的单个单元格,例如Thu的DO1单元格需显示
6u00 + 22u00 - 输入表格:第一列为日期(如
Mon 1、Thu 3),后续列是DO1至DO4,部分单元格内容为Thu 6u00、Sat 3u00这类格式 - 输出表格:第一列为DO1至DO4,后续列为Mon至Sat,每个单元格需合并对应日期+对应DO列的所有数据
当前公式局限
使用以下公式仅能返回同一天的首个匹配结果,无法合并多条数据:
=IFERROR(TEXTAFTER(INDEX(E21:E37,XMATCH(H25:M25,LEFT(E21:E37,2)),)," "),"")
未完成的LET函数尝试
尝试结合MAKEARRAY与TEXTJOIN构建批量处理公式,但卡在FILTER逻辑部分:
=LET(_Input,L1:O19, '输入表格(不含第一列) _Do,{"","DO1","DO2","DO3","DO4"}, _Day,{"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"}, _Week,LEFT(G1:G19,3), '输入表格第一列的日期前缀 _rijen,ROWS(_Do)-1, _Kols,COLUMNS(_Day), _Export,TEXTAFTER(_Input," ",,,,), _Databody,MAKEARRAY(_rijen,_Kols,LAMBDA(r,c,INDEX(TEXTJOIN(" + ",TRUE(FILTER( - 此处逻辑未完成 - ))), _Stack,HSTACK(_Do,VSTACK(_Dag,_Databody)), _Stack)
注:使用Excel 365版本,无GROUPBY等Beta函数权限
完整解决方案
通过完善LET函数中的FILTER逻辑,结合TEXTJOIN实现批量合并,单个公式即可生成完整输出表格:
=LET( 输入区域, G1:O19, '完整输入表格(含第一列日期) DO列标题, {"DO1","DO2","DO3","DO4"}, 日期列表, {"Mon","Tue","Wed","Thu","Fri","Sat"}, 提取日期前缀, LEFT(INDEX(输入区域,0,1),3), '提取输入表格第一列的日期前缀 DO列索引, SEQUENCE(ROWS(DO列标题)), 日期索引, SEQUENCE(COLUMNS(日期列表)), 合并数据, MAKEARRAY(ROWS(DO列标题),COLUMNS(日期列表), LAMBDA(r,c, LET( 当前DO列, INDEX(输入区域,0,r+1), '对应DO列(输入区域第r+1列,因第一列是日期) 当前日期, INDEX(日期列表,c), 过滤结果, FILTER(TEXTAFTER(当前DO列," ",,,""), 提取日期前缀=当前日期), TEXTJOIN(" + ",TRUE,过滤结果) ) ) ), HSTACK(DO列标题, 合并数据) )
公式逻辑说明
输入区域指定完整的输入表格范围(包含第一列日期)提取日期前缀从输入表格第一列提取前3位日期标识(如Mon、Thu)MAKEARRAY生成输出表格主体区域,通过LAMBDA遍历每个DO行和日期列:- 定位当前处理的DO列和目标日期
- 用
FILTER筛选出当前日期下该DO列的所有有效数据,并用TEXTAFTER提取时间部分 - 最后用
TEXTJOIN将筛选结果用+连接
HSTACK将DO列标题与合并后的主体区域拼接成完整输出表格
内容的提问来源于stack exchange,提问作者Excellor
相关产品推荐
相关产品推荐

