Google Sheets中提取全局重复邮政编码的函数问题求助
Google Sheets 提取全局重复邮政编码的解决方法
问题分析
你原公式=filter(split(B2,","),arrayformula(countif(split(B2,","),B2)>1))无效的核心原因:COUNTIF的统计范围仅局限于当前行拆分后的邮政编码,而非整个B列所有单元格拆分后的全局邮编列表,因此只能检测当前行内的重复,无法识别跨行的全局重复。
正确公式(C2单元格输入,下拉填充)
=TRANSPOSE(FILTER(TRIM(SPLIT(B2,",")), COUNTIF(FLATTEN(SPLIT(TEXTJOIN(",",TRUE,B:B),",")), TRIM(SPLIT(B2,",")))>1))
公式拆解
构建全局邮编列表:
FLATTEN(SPLIT(TEXTJOIN(",",TRUE,B:B),","))TEXTJOIN(",",TRUE,B:B):将B列所有单元格的邮政编码用逗号连接成一个字符串,自动忽略空单元格SPLIT(...,","):把连接后的长字符串拆分成多列数据FLATTEN(...):将多列数据转换为单列,得到覆盖所有行的全局邮政编码列表
清理当前行邮编:
TRIM(SPLIT(B2,","))- 拆分当前行的邮编后,用
TRIM去除可能存在的首尾空格,避免因空格导致匹配失败
- 拆分当前行的邮编后,用
统计全局出现次数:
COUNTIF(全局邮编列表, 当前行单个邮编)- 逐个统计当前行内每个邮编在全局列表中的出现次数
过滤并横向输出:
TRANSPOSE(FILTER(..., 出现次数>1))- 筛选出全局出现次数大于1的邮编,用
TRANSPOSE将纵向结果转为横向,自动填充到C列及后续列
- 筛选出全局出现次数大于1的邮编,用
示例效果
假设B列数据如下:
B2: 100001,100002,100003
B3: 100002,100004
B4: 100001,100002
则:
- C2:D2 显示
100001、100002 - C3 显示
100002 - C4:D4 显示
100001、100002
内容的提问来源于stack exchange,提问作者JeffSasse
相关产品推荐
相关产品推荐

