今天和大家分享的是如何快速获取符合某个条件的第N个数。
如果这个问题改为获取最大的数,那一定很好解决,但是工作中不但要知道第一高峰是珠穆朗玛峰,还需要知道第二高峰是乔戈里峰,第三高峰是干城章嘉峰。
怎么样?看本公众号还可以学习地理知识吧!
咳咳,鉴于我一直是很严肃的小编,在此,正式和大家分享。
需求如下,小编所在的年级的成绩排行如下:
我想根据年级的成绩排名,获取一班的前三名的名称,就是标黄色的!
至此,读者一定有两个问题?
1、阿凯是谁? 2、为啥他是0分?
答:1、阿凯是小编,2、你和这么多美女一个班级,你会好好学习哇!!!!
怎么得到这个答案的尼~~~~~
直接把答案粘贴下来吧:
{=INDEX(B1:B9,SMALL(IF(C2:C9="一班",ROW(C2:C9),100),G2))}
我翻译一下:
{=INDEX(姓名列表,SMALL(IF(班级信息="一班",ROW(班级信息),一个很大的数),第几名))}
至此,如果能够读懂这个函数的人,可以直接关掉本篇内容,继续和苍老师谈人生好了!
还在的亲们,介绍几个函数给各位亲:
1、IF函数,最常用的判断函数,咋用呢?
=IF(判断条件,为真返回什么,为假返回什么)
例子:
=IF(小编=最帅的人,“真有眼光”,“不喜欢我的人多了,你算老几!”)
返回值是“真有眼光”
2、Small函数,返回某个数组的第N个小的值
姐妹函数是Large,返回某个数组的第N个大的值
=Small(数组,第几个小的数)
例子:
=Small({4,3,1,2,8},3) 返回值是3
3、Index函数,引用函数,返回某个数组的第几个值
注意:这里是没有进行排序的,直接按照顺序返回第几个
=Index(数组,第几个值)
=Index({4,3,1,6,8},3) 返回值是1
知道Index和Small的区别了吧!
4、Row函数,返回某个单元格的对应行数
=Row(单元格)
=Row(C4) 返回值是4
啰嗦这么多,你们肯定把问题都忘了,重新上图
我想获取一班第一至第三名需要怎么做呢?简述一下思路
知道哪些人是一班的->得到他们的行号->然后找到第几小的行号信息->返回行对应的姓名
慢动作分解第一次!
第一步:我需要知道哪些人是一班的(用IF语句实现)
如果他是一班的,返回他对应的行数,如果不是一班的,我就赋予他一个很大的值(本案例赋值100)
语句实现:
=IF(C2:C9="一班",ROW(C2:C9),100)
翻译:IF(班级信息="一班",ROW(班级信息),100)
由于班级信息是{一班,二班,二班,一班,一班,一班,二班,一班}
所以IF的返回值就是{2,100,100,5,6,7,100,9}
第二步:接下来要获取第一名所对应的行信息
语句实现:
=Small({2,100,100,5,6,7,100,9},1)
如果是第一名就返回的是2,如果是第二名返回的就是5
这二步实现了获取不同名次的行信息。
第三步:知道了行信息,返回对应的姓名
语句实现:
=Index(姓名列表,返回第几个姓名)
整体函数的实现思路就是这样!
如果不清楚,慢动作分解第二次!
第一步:判断语句,如果是一班,返回行数,如果不是,返回100
=IF(C2:C9="一班",ROW(C2:C9),100)
第二步:获取上面数组中第N个小的值(本案例获取第二个小的)
=SMALL(F2:F9,2)
第三步:返回第五行对应的姓名信息
整个函数的逻辑引用精华就是在上面这个图啦,然后就将上一个步骤的函数嵌套到下一个函数的里面就好!
结论性的公式如下:
{=INDEX(B1:B9,SMALL(IF(C2:C9="一班",ROW(C2:C9),100),G2))}
看到外面的{ }了没,这个不是人为输入的,而是因为用到了数组,所以编辑好函数后,要用Ctrl+Shift+Enter结束,结束后自动添加{}!
如果还想优化一下的话,可以做个绝对引用!
{=INDEX($B$1:$B$9,SMALL(IF($C$1:$C$9="一班",ROW($C$1:$C$9),100),G2))}
今天就到这里!
感谢观看!