2,INDEX会点名
3,一个比VLOOKUP厉害百倍的组合
4,INDEX和VLOOKUP的区别
1 INDEX函数的语法
Excel世界有400多个工作表函数,INDEX原本是其中最不起眼的几个之一。
INDEX的官方语法:
INDEX有两种语法形式,第2种基本用不着,所以看过就当没看过。
第一种:
=INDEX(array,row_num, [column_num])
即
=INDEX(查找范围,查找范围的第几行?查找范围的第几列?)
第二种:
INDEX(reference,row_num,column_num,area_num)
翻译:看了也用不着的家伙,莫搭理。
……
2 INDEX会点名
INDEX上学那会,凭着一副好脸蛋,被班主任任命为班长。这班长毕竟不是通过能力选上的,所以就没什么能力,只会简单的点点名。
举个小栗子。
如上图。
陛下说,INDEX,你去把A列第2行的人叫过来,赵国已经攻打过来了,还喝酒呢?
INDEX应一声,就去了。
他在心里想,去哪找?去A列。A列第几行?第2行。A列里的第几列?陛下没说,那就默认是当前列吧。
=INDEX(A:A,2)
结果是刘邦
找完了,陛下又说,INDEX,干得不错嘛,再去把第2行里第2列的将军叫起来,打仗做春梦,对得起出生如死的兄弟吗?
INDEX应了一声,又去了。
他在心里想,去哪找,第2行,那人在第二行的第几行?陛下没说啊,陛下为什么又没说?算了,就默认是当前行吧。第二行的第几列呢?第2列。
=INDEX(2:2,0,2)
结果是李白
这时候,INDEX忽然灵机一动,想起来将它创造出来的、那个懒到刷个牙都要花上三个月时间的微软工程师,不禁一阵恶心。接着,他想起来那工程师给他说过的一句话,当它的查找范围是单行时,如果省略第3参数,则第2参数默认为列,而不是原本的行。
于是它就换了种叫法:
=INDEX(2:2,2)
结果当然还是李白
李白:INDEX你有毒吧?没事当着武松的面喊我两次干嘛?
找完了,陛下又说,Index公公,你去把朝里第8行第3列的官员给我叫起来,上朝谈恋爱——就算了,不知道人家是名花有主的吗?赵家人,他惹得起我惹不起。
INDEX脚不沾地,就去做事了。
=INDEX(A:C,8,3)
结果是燕青。
燕青被当众点了名,自尊心受到很大的伤害,第二天就带着他的同桌李师师私奔了。
3 一个比VLOOKUP厉害百倍的组合
INDEX班长做的久了,点名的事儿越来越麻利。但是,糟糕的是,他点名得让老师报坐标。老师本来就懒,时间久了,就有点受不了。
有一天,老师说,INDEX,你去把C列的西门庆给我叫起来,天天喝酒睡觉……
INDEX很高兴就去了。
他心想,去哪里找?去C列,C列里的第几行?老师没说,C列里的第几列?老师还是没说!老师为啥都没说?只说了查找范围,但没说结果在查找范围的第几行第几列那去哪里找?…………
………?……
……??…
……
……INDEX混沌了,他又想起那个刷个牙都要磨蹭3个月的微软工程师,他记得那人说过,没有坐标,他基本啥都干不了。
于是INDEX的班长职位就被撤了,后来的班长是班花VLOOKUP。
INDEX本来有点儿暗恋VLOOKUP,但男人嘛,事业为重,岂能在意儿女情长?经此一事,INDEX就对VLOOKUP由爱转恨,暗暗发誓早晚有一天要把VLOOKUP给……比下去。
过了没多久,班上来了个转校生,名字叫MATCH。
MATCH这家伙我们上一篇介绍过,它可以在单行或者单列的范围内,快速搜索指定值,并返回该值在查找范围内的首个匹配结果的位置序号——对INDEX来说,这简直就是天赐CP。
去C列把西门庆给抓出来?
=INDEX(C:C,MATCH("西门庆",C:C,0))
MATCH函数找出西门庆在C列的位置序号,也就是坐标了,INDEX直接按图索骥,就把西门庆给抓出来了。
INDEX对MATCH一见倾心,把所有的零花钱都请了MATCH喝酒(台湾五粮液),喝醉了就一起过夜,第二天,两人宣布出…… 柜柜柜 ……组合,并打出口号,一个比VLOOKUP强大百倍的函数组合。
从此函数世界多了很多惊爆眼球的宣传标题。
什么叫做1+1>年薪100000?说的就是……
过了30岁还不会用这个组合函数,活该被辞退!
学了这个组合函数,工资立马翻三倍!
凭借这个组合函数,新同事一夜之间成功征服老板
VLOOKUP遇到它,立刻就被秒到渣都不剩!
看到这个神技,吓得我赶紧学习Excel
……
标题虽然十分雷人,但市场风气如此,也不好说什么。
好在INDEX和MATCH组合也确实是有真本事的。VLOOKUP能做的事,他俩都能做。VLOOKUP做起来比较困难的,甚至不能做的,他俩也能做。所谓比VLOOKUP强大百倍,也算是名副其实了。
还是举两个小栗子。
学过VLOOKUP函数后,我们都知道VLOOKUP在逆向查询上非常费力。
INDEX+MATCH函数就没有这样的烦恼。
如上图所示,需要在E列查询D2姓名的ID。
VLOOKUP函数是这样的:
=VLOOKUP(D2,IF({1,0},B:B,A:A),2,0)
这是一个数组公式,运算效率和编写体验都奇差无比。
而INDEX+MATCH组合是这样的:
=INDEX(A:A,MATCH(D2,B:B,0))
MATCH函数找出D2的值在B列的序列号,INDEX在A列直接按该序号点名抓人。
该公式书写简洁,运算效率也是函数里出类拔萃的。
……
如上图所示,需要查询李清照在几号房?
这是横向查询,VLOOKUP只能纵向查询,对此无能为力。
INDEX+MATCH轻松搞定:
=INDEX(1:1,MATCH("李清照",2:2,0))
结果是三号房。
4 INDEX和VLOOKUP的区别
那么,INDEX+MATCH的组合到底比VLOOKUP强在哪里呢?或者说,两者之间的差别到底是什么?
大体说起来,有3点。
1)
VLOOKUP的查询依据列只能是首列,换句话说,它只能在查询范围的首列查找某个匹配值,然后再依此向右偏移列数,获取结果。
INDEX+MATCH则不一样,有MATCH帮忙,它可以将任意列或行作为查询依据列/行,这就自由了。因为自由,所以强大。
2)
一般来说,INDEX+MATCH组合的计算效率优于VLOOKUP函数。
3)
对大部分人来说,第3点通常来说不重要,了解就好。
当查找区域是单元格时,VLOOKUP只能返回单元格的值,而INDEX返回的是单元格引用。
所谓值,就是“李清照”、"李白"这样的单元格内的数据。而单元格引用,我们在数据类型里也讲过了,简单说就是单元格自身。而一个单元格包含了很多属性,比如单元格内的值、单元格的地址、单元格的行高、单元格的格式等等。
举个例子。
比如:=INDEX(A:A,2)
返回的是什么呢?
有朋友说返回的是A2单元格的“刘邦”啊。
准确来说,其实并不是。
INDEX返回的是A2单元格的引用。只是由于“值”是单元格的默认显示属性,所以我们眼睛看到的只是“刘邦”。
比如我想知道A列的“刘邦”的单元格地址是什么?
=CELL("address",INDEX(A:A,2))
INDEX函数返回“刘邦”所在单元格,CELL函数计算其地址,结果为2
"刘邦“所在的单元格的列宽是多少?
=CELL("width",INDEX(A:A,2))
计算出结果为10