Google Sheets中用Lambda按行合并唯一值并兼容ArrayFormula
Google Sheets 按行合并唯一非空值的TEXTJOIN实现方法
问题场景
需要实现一个可配合BYROW(替代ArrayFormula批量处理)的改良版TEXTJOIN,要求忽略空单元格且按行合并唯一值,示例如下:
| 1 | 2 | 3 | 预期结果 |
|---|---|---|---|
| one | one | one | |
| one | two | one, two | |
| one | two | three | one, two, three |
现有尝试与问题
用BYROW实现按行TEXTJOIN是可行的:=BYROW(A3:F,LAMBDA(r,TEXTJOIN(", ",1,r)))
但直接加入UNIQUE筛选唯一值时会失败:=BYROW(array, LAMBDA(r, TEXTJOIN(", ", 1, UNIQUE(r))))
解决方案
问题出在UNIQUE处理带空值的行时,会保留空值条目,导致TEXTJOIN仍会出现异常分隔符。需要先过滤空值,再取唯一值,最后合并:
标准公式写法
=BYROW(A3:F, LAMBDA(r, TEXTJOIN(", ", 1, UNIQUE(FILTER(r, r<>"")))))
原理说明
FILTER(r, r<>""):先过滤当前行的所有空单元格,仅保留非空值UNIQUE(...):对过滤后的非空值提取唯一值TEXTJOIN(", ", 1, ...):将唯一非空值用指定分隔符合并,第二个参数1表示忽略空值(双重保障)
简化替代写法(新版Google Sheets适用)
如果无需兼容旧版,可使用TOCOL替代FILTER,写法更简洁:=BYROW(A3:F, LAMBDA(r, TEXTJOIN(", ", 1, UNIQUE(TOCOL(r,1)))))
其中TOCOL(r,1)的第二个参数1表示忽略空单元格,将行转为列后再提取唯一值。
内容的提问来源于stack exchange,提问作者MMsmithH
相关产品推荐
相关产品推荐

