解法1:错位引用法 ▼
=INDEX(C:C,MATCH(0,COUNTIF(G$1:G1,C$2:C$37),)+1)
解法2:万金油套路 ▼
=INDEX(C:C,SMALL(IF(MATCH(C$2:C$37&"",C$2:C$37&"",0)=ROW($1:$36),ROW($2:$37)),ROW(A1)))
解法1用到了COUNTIF函数,公式看起来比较简洁,但数据量稍大运算效率就断崖式下滑。
解法2呢?你也看出来,公式很烦琐,编写调试都不容易,最终运算效率也不高。
这还只是单列数据去重复,如果需要班级、小组、姓名三列同时去重复呢?
打个响指,事已至此——前戏就铺的差不多了
这事如果你的Excel版本是2021+,又或者WPS,使用UNIQUE简直不要太简单。
G2单元格输入以下公式即可▼
=UNIQUE(C2:C37)
而如果需要班级、小组、姓名三列同时去重复呢?
可以使用以下公式▼
=UNIQUE(A2:C37)
……
作为一个有经历的函数老人,事情解决的如此简单,我一时间也不知道该说什么好。
……
还是聊一下UNIQUE的语法。
=UNIQUE(数据源,[去重方向],[是否返回只出现1次的项])
它有三个参数,第2、3参数都是可选的。第2参数指定了去重的方向,是按行还是按列去重,FALSE代表行,TRUE代表列,默认是行。第3参数也是一个逻辑值,如果是FALSE,则返回唯一值列表;如果是TRUE,则返回只出现1次的数据。
关于2、3参数,我分别举一个例子,你看一下也就明白了。
按列方向去重
=TEXTJOIN(",",1,UNIQUE(B2:F2,1))
UNIQUE(B2:F2,1)获取B2:F2单元格区域的唯一值,这是一个单行区域,需要按不同列去重,因此第2参数设置为1,也就是TRUE。
=UNIQUE(A2:A17,0,1)
第3参数为1,等同逻辑值TRUE,表示统计只出现1次的数据。
解法1:数组+倒数运算: ▼
=SUMPRODUCT((B$2:B$12>=B2)/COUNTIF(B$2:B$12,B$2:B$12))
而如果使用UNIQUE函数就很简单明了了
解法2:UNIQUE函数 ▼
=SUM((UNIQUE(B$2:B$12)>B2)*1)+1
UNIQUE(B$2:B$12)返回B2:B12区域唯一值列表,然后和B2作比较,如果大于B2则返回TRUE,否则返回FALSE,乘1后逻辑值转换为数值,再用SUM求和,最后加1即为结果。
除此之外,也可以使用以下公式:
解法3:动态数组▼
=MATCH(B2:B12,SORT(UNIQUE(B2:B12),1,-1),0)
使用SORT函数对UNIQUE返回的唯一值列表降序排列,再用MATCH函数查询B列成绩在该结果中首次出现的序列号,也就是中式排名的结果。
▎2:非重复计数
如下图所示,A:B列是数据源,需要统计不同班级不重复的人数,也就是通常所说的按条件去重复计数。
常规函数解法如下▼
解法1:数组公式: ▼
=COUNT(0/(
MATCH(D2&B$2:B$11,A$2:A$11&B$2:B$11,0)
=ROW($1:$10)
))
而如果使用UNIQUE函数就很简单明了了
解法2:UNIQUE函数 ▼
=COUNT(0/LEN(
UNIQUE(FILTER(B$2:B$11,A$2:A$11=D2))
))
FILTER筛选出A列班级等于D2指定班级的B列的人名,UNIQUE对此去重,再用COUNTA统计去重后的个数。
这里可以思考一下,我为什么没有直接使用COUNT(UNIQUE)),而且增加了一个LEN函数嵌套呢?是因为凑字数吗?
……
摊手,没了,今天分享的内容就这样。有啥问题可以在VIP会员群中提问交流,右下角点个赞,咱们下期再见。
案例文件下载百度网盘..▼
https://pan.baidu.com/s/1NqmPfFo8vkdG3HvFvwQGdg
提取码: wpvw
本文由公众号“Excel星球”首发。
点击阅读原文系统学习Excel!