Google Sheets:基于ID、日期和序列合并指定列,求单公式方案
单公式实现Google Sheets按ID、日期合并指定列内容
需求说明
基于表格中的ID、日期和序列列,合并对应备注内容,替代原三步操作(排序→按ID+日期合并当日备注→按ID合并所有日期备注),实现无辅助列的单公式输出。
单个数组公式
=BYROW(UNIQUE('Raw Data'!B2:B), LAMBDA(id, { id, TEXTJOIN(" ", TRUE, BYROW(UNIQUE(FILTER('Raw Data'!C2:C, 'Raw Data'!B2:B=id)), LAMBDA(date, TEXT(date, "MM-DD-YYYY")&": ("&TEXTJOIN(" ", TRUE, SORT(FILTER('Raw Data'!E2:E, 'Raw Data'!B2:B=id, 'Raw Data'!C2:C=date), FILTER('Raw Data'!D2:D, 'Raw Data'!B2:B=id, 'Raw Data'!C2:C=date), TRUE))&")" )) }))
公式逻辑拆解
- 外层
BYROW(UNIQUE('Raw Data'!B2:B), ...):遍历所有唯一ID,逐个处理 - 内层
BYROW(UNIQUE(FILTER(...)), ...):对当前ID,遍历其对应的所有唯一日期 SORT(FILTER(...), ..., TRUE):按序列列升序筛选并排序当前ID+日期对应的备注,保证顺序正确TEXTJOIN:分别合并当日备注、合并当前ID下所有日期的备注内容TEXT(date, "MM-DD-YYYY"):将日期格式化为指定样式后与备注拼接
替代方案(使用GROUPBY函数)
若你的Google Sheets支持GROUPBY函数,可使用更简洁的写法:
=GROUPBY('Raw Data'!B2:B, 'Raw Data'!C2:C, LAMBDA(dates, TEXTJOIN(" ", TRUE, GROUPBY(dates, 'Raw Data'!E2:E, LAMBDA(notes, TEXT(INDEX(dates,1),"MM-DD-YYYY")&": ("&TEXTJOIN(" ", TRUE, SORT(notes, FILTER('Raw Data'!D2:D, 'Raw Data'!B2:B=INDEX('Raw Data'!B2:B,ROW(dates)), 'Raw Data'!C2:C=INDEX(dates,1)), TRUE))&")"), 0)), 0)
内容的提问来源于stack exchange,提问作者HSHO
相关产品推荐
相关产品推荐

