Google Sheet:动态合并相同日期对应B列文本内容的技术问询
搞定Google Sheets动态表单的日期分组文本合并
嘿,你这个手动复制粘贴的麻烦事我太懂了!针对表单提交的动态数据需求,我给你两个完全自动的解决方案,以后再也不用手动操作啦~
方案一:一步到位的动态数组公式
这个方案最省心,直接在新区域生成所有合并结果,表单提交新数据时会实时更新。
假设原始数据在A列(日期,A1是表头)、B列(文本,B1是表头),你可以在C1输入日期,D1输入合并内容,然后在C2单元格粘贴下面的公式:
=ARRAYFORMULA({ UNIQUE(FILTER(A2:A, A2:A<>"")), BYROW(UNIQUE(FILTER(A2:A, A2:A<>"")), LAMBDA(date, TEXTJOIN("; ", TRUE, FILTER(B2:B, A2:A=date)) )) })
公式里的关键逻辑:
UNIQUE(FILTER(A2:A, A2:A<>"")):提取A列所有非空的唯一日期,过滤掉空白行BYROW(...):逐个遍历每个唯一日期,对每个日期执行合并操作TEXTJOIN("; ", TRUE, FILTER(B2:B, A2:A=date)):筛选出当前日期对应的所有B列文本,用;(分号+空格)合并,TRUE会自动忽略空文本
输入后,C、D列会立刻生成所有日期的合并结果,而且只要表单有新数据提交,这个区域会自动同步更新,完全不用管!
方案二:分步骤构建(新手友好版)
如果觉得上面的数组公式有点绕,可以拆成两步来做,逻辑更清晰:
- 生成唯一日期列:在C2输入
=ARRAYFORMULA(UNIQUE(FILTER(A2:A, A2:A<>""))),这会自动列出所有不重复的日期 - 生成合并文本列:在D2输入
=BYROW(C2:C, LAMBDA(date, IF(date="", "", TEXTJOIN("; ", TRUE, FILTER(B2:B, A2:A=date))))),这会对应每个日期合并B列的文本
小技巧:
- 你可以把
TEXTJOIN里的"; "换成任何你想要的分隔符,比如", "(逗号+空格),或者用CHAR(10)实现换行合并(记得给单元格设置「自动换行」) - 一定要在新列或新工作表里放公式,别碰原始的A、B列!因为表单提交新数据时会自动新增行,可能会覆盖你的公式
内容的提问来源于stack exchange,提问作者Sabba




