Google Sheets按相同A列合并B列值及按首字母累计数值求助
Google Sheets 数据处理需求实现方案
需求1:A列同值时合并对应B列数值
使用以下公式可直接输出「A列唯一值+对应合并后B列内容」的两列结果:=BYROW(UNIQUE(FILTER(A:A,A:A<>"")),LAMBDA(x,{x,TEXTJOIN(",",1,FILTER(B:B,A:A=x))}))
- 逻辑说明:先提取A列非空的唯一值,遍历每个唯一值筛选出所有对应的B列内容,用逗号合并并自动忽略空值。
需求2:逗号分隔的首字母对应数值累加
针对单个单元格内符合「字母:数字」格式的逗号分隔内容,使用以下公式完成同字母数值累加:
=LET( split_items,SPLIT(TRIM(待处理单元格),",",1,1), kv_pairs,BYROW(split_items,LAMBDA(i,{LEFT(TRIM(i),1),--REGEXEXTRACT(TRIM(i),"\d+")})), unique_keys,UNIQUE(INDEX(kv_pairs,,1)), sum_vals,BYROW(unique_keys,LAMBDA(k,SUMIF(INDEX(kv_pairs,,1),k,INDEX(kv_pairs,,2)))), TEXTJOIN(",",1,BYROW(SEQUENCE(ROWS(unique_keys)),LAMBDA(i,INDEX(unique_keys,i)&":"&INDEX(sum_vals,i)))) )
- 逻辑说明:先按逗号拆分内容,逐行提取首字母和对应数值,去重首字母后分组累加数值,最后拼接回要求的字符串格式。
双需求整合公式(从原始数据直接输出最终结果)
如果需要从原始A、B列一步得到最终的分组累加结果,直接使用以下数组公式即可,无需中间辅助列:
=BYROW(UNIQUE(FILTER(A:A,A:A<>"")),LAMBDA(group, LET( group_bs,FILTER(B:B,A:A=group), all_items,FLATTEN(BYROW(group_bs,LAMBDA(b,SPLIT(TRIM(b),",",1,1)))), kv_pairs,BYROW(all_items,LAMBDA(i,{LEFT(TRIM(i),1),--REGEXEXTRACT(TRIM(i),"\d+")})), unique_keys,UNIQUE(INDEX(kv_pairs,,1)), sum_vals,BYROW(unique_keys,LAMBDA(k,SUMIF(INDEX(kv_pairs,,1),k,INDEX(kv_pairs,,2)))), {group,TEXTJOIN(",",1,BYROW(SEQUENCE(ROWS(unique_keys)),LAMBDA(i,INDEX(unique_keys,i)&":"&INDEX(sum_vals,i))))} ) ))
- 注意:如果你的数据格式存在空格、字母后有特殊符号等情况,只需调整
REGEXEXTRACT的匹配规则即可适配。
内容的提问来源于stack exchange,提问作者Davanli
相关产品推荐
相关产品推荐

