Google Sheets按ID分组聚合行列数据到单个单元格的公式咨询
Google Sheets 按任务ID分组聚合实现方案
默认假设数据源存放在名为数据源的工作表中,列对应关系为:A=Condition、B=Task ID、C=Hours、D=Mins、E=Customer、F=Description,你可根据实际列位置调整公式中的范围参数。
一键生成完整结果表
直接在结果表的A1单元格输入以下公式,可自动生成表头、唯一Task ID列、对应聚合内容列:
=ARRAYFORMULA( LET( // 按Condition字段过滤有效行,可自行修改过滤条件 filtered, FILTER(数据源!B:F, 数据源!A:A="已完成"), // 提取去重后的任务ID列表 task_ids, UNIQUE(INDEX(filtered,,1)), // 逐ID聚合对应内容 agg_result, BYROW(task_ids, LAMBDA(id, LET( match_rows, FILTER(filtered, INDEX(filtered,,1)=id), time_val, INDEX(match_rows,,2)&":"&INDEX(match_rows,,3), item_str, time_val&" "&INDEX(match_rows,,4)&" "&INDEX(match_rows,,5), TEXTJOIN(CHAR(10), TRUE, item_str) ) )), // 输出最终结果 {"Task ID", "聚合内容"; task_ids, agg_result} ) )
使用注意事项
- 过滤规则调整:替换公式中
数据源!A:A="已完成"为你实际需要的Condition过滤逻辑即可 - 列位置调整:如果数据源列顺序和默认假设不一致,修改
FILTER(数据源!B:F, ...)的选取范围,以及INDEX(filtered,,x)的序号即可(序号为你选取的过滤范围内的列顺序) - 换行显示:选中聚合内容列,点击工具栏「文本换行」→「自动换行」,即可正常显示多条记录的换行效果
单独生成聚合列方案
如果你的结果表A列已经手动录入了Task ID,在B2单元格输入以下公式后下拉即可生成对应聚合内容:
=LET( match_rows, FILTER(数据源!C:F, 数据源!A:A="已完成", 数据源!B:B=A2), TEXTJOIN(CHAR(10), TRUE, INDEX(match_rows,,1)&":"&INDEX(match_rows,,2)&" "&INDEX(match_rows,,3)&" "&INDEX(match_rows,,4)) )
内容的提问来源于stack exchange,提问作者Julius
相关产品推荐
相关产品推荐

