如何让Google Sheets的UNIQUE公式忽略指定列(列C)
嘿,这个需求我经常碰到!原生的UNIQUE(A:F)会检查所有列的内容,所以要忽略C列的话,得换个思路——核心是让公式只把A、B、D、E、F列作为判断“唯一”的依据,不管C列是什么。下面给你几个实用的方案,按需选择:
方案1:用QUERY分组(最直观易读)
如果你不介意C列取每组的某个统计值(比如第一个出现的值、最小值/最大值),这个方法最容易上手:
=QUERY(A:F, "SELECT A,B,MIN(C),D,E,F GROUP BY A,B,D,E,F", 1)
- 细节说明:
GROUP BY A,B,D,E,F会把这五列完全相同的行归为一组;MIN(C)表示取每组里C列的最小值,你可以换成MAX(C)取最大值,或者FIRST(C)保留该组第一行的C列值(需要开启Google Sheets的「新函数」功能);- 最后那个
1代表你的数据有表头,如果没有表头就改成0。
方案2:用UNIQUE+XLOOKUP(保留原行完整结构)
如果你想保留原数据中符合条件的完整行(比如每组保留第一出现的那一行),可以用这个组合公式:
=BYROW(UNIQUE(CHOOSECOLS(A:F,1,2,4,5,6)), LAMBDA(u, XLOOKUP(TEXTJOIN("|",TRUE,u), TEXTJOIN("|",TRUE,CHOOSECOLS(A:F,1,2,4,5,6)), A:F, "", 0, 1)))
- 细节说明:
CHOOSECOLS(A:F,1,2,4,5,6)先提取出A、B、D、E、F列的内容;UNIQUE得到这些列的唯一组合;BYROW遍历每个唯一组合,用XLOOKUP在原数据中找到第一个匹配的完整行并返回,完美保留原行的C列值。
方案3:用LAMBDA+UNIQUE(简洁的新版函数写法)
如果你的Google Sheets支持LAMBDA系列函数,还可以直接构造一个忽略C列的“唯一判断逻辑”:
=UNIQUE(BYROW(A:F, LAMBDA(row, IF(COUNTA(row)=0, "", TEXTJOIN("|", TRUE, INDEX(row,1), INDEX(row,2), INDEX(row,4), INDEX(row,5), INDEX(row,6)) & "|" & TEXT(row, "@")))))
- 细节说明:
BYROW遍历每一行,把A、B、D、E、F列拼接成一个唯一标识字符串,再附加整行的文本化内容;UNIQUE会基于这个标识去重——只要A/B/D/E/F列相同,不管C列是什么,都会被视为重复行合并。
内容的提问来源于stack exchange,提问作者JPashs
相关产品推荐
相关产品推荐

