如何使用ARRAYFORMULA创建合并同类别项目的表格?
解决方案:批量合并同类别的项目到单个单元格
问题背景
现有表格结构:
| 项目 | 类别 |
|---|---|
| 苹果 | 水果 |
| 橙子 | 水果 |
| 花椰菜 | 蔬菜 |
| 玫瑰 | 花卉 |
| 郁金香 | 花卉 |
| 牛排 | 肉类 |
| 胡萝卜 | 蔬菜 |
| 三文鱼 | 肉类 |
需要生成的目标表格:
| 类别 | 项目 |
|---|---|
| 水果 | 苹果, 橙子 |
| 蔬菜 | 花椰菜, 胡萝卜 |
| 肉类 | 牛排, 三文鱼 |
| 花卉 | 玫瑰, 郁金香 |
用户当前可实现单个类别合并的公式:=ARRAYFORMULA(CONCATENATE(REPT(A3:A&" ",B3:B=G3)))
但无法批量处理,需要适配成可自动批量生成的ArrayFormula。
批量处理公式
在D2单元格输入以下公式,会自动生成唯一类别列(D列)和对应的合并项目列(E列):
=LET( unique_cats, UNIQUE(B3:B), joined_items, BYROW(unique_cats, LAMBDA(cat, TEXTJOIN(", ", TRUE, FILTER(A3:A, B3:B=cat)))), HSTACK(unique_cats, joined_items) )
公式说明
UNIQUE(B3:B):提取B列中的所有唯一类别,作为目标表格的D列内容。BYROW(unique_cats, LAMBDA(cat, TEXTJOIN(", ", TRUE, FILTER(A3:A, B3:B=cat)))):遍历每个唯一类别,用FILTER筛选出对应类别的项目,再用TEXTJOIN将项目以,分隔合并成单个字符串。HSTACK:将唯一类别列和合并后的项目列横向拼接,形成目标表格结构。
替代方案(旧版Google Sheets兼容)
如果你的Google Sheets版本不支持LET或BYROW,可以使用以下数组公式:
在D2单元格输入:
=ARRAYFORMULA( IFERROR( VLOOKUP( UNIQUE(B3:B), QUERY(A3:B, "select B, GROUP_CONCAT(A, ', ') group by B"), {1,2}, FALSE ) ) )
这个公式通过QUERY函数的GROUP_CONCAT直接按类别分组合并项目,再配合UNIQUE和VLOOKUP输出结果。
内容的提问来源于stack exchange,提问作者coltzans
相关产品推荐
相关产品推荐

