Excel2010及以后的版本
vlookup()函数、match()函数
朱贵觉得这个任务毫无难度,用自己已经掌握的vlookup()函数就可以轻松搞定。于是他很快的开始设置公式,在B2单元格中输入“=VLOOKUP(A2,信息人员资料!B:G,2,0)”,在C2单元格中输入“=VLOOKUP(A2,信息人员资料!B:G,5,0)”,这样他已经很快查找到了第一个人的2个信息。他想等他完成第一个人的所有信息查找,只需要向下拖拉复制,就可以完成所有人的信息查找。
这时,朱贵突然发现,他列的这两个公式,其实都是根据姓名查找信息,从公式本身而言,除第3个参数(返回列)不一样外,其他的完全相同。因此,他想到如果能指定每次返回列值的话,就可以用同一个vlookup()公式完成所有的查找。他由此想到match()这个函数,可以用来返回查找值所在的位置。经分析前面2个公式可知,这个返回值就是“性别”、“特长”在数据源表“信息人员资料”表中从“姓名”起的的列数。
于是他先试用match()函数来返回“性别”所在的位置,看能不能达到预想的效果。在B2单元格中输入公式:“=MATCH(B1,信息人员资料!B1:G1,0)”,其中B1为“性别”,信息人员资料!B1:G1是数据表从姓名(vlookup查找的首列)开始的标题行。如果match函数能在标题行找到“性别”所在位置,也就得到了vlookup需要返回的列号。同样,再验证查找“特长”的位置,返回值为5。
经过试验,说明他的思路是正确的,于是他将B2单元格中的公式修改为:=VLOOKUP(A2,信息人员资料!B:G,MATCH(B1,信息人员资料!B1:G1,),0),返回值为“女”,结果正确。但是再将公式向下拖拉复制到本列所有单元格,结果却发生错误。这是为什么呢?他发现A3单元格的公式成了“=VLOOKUP(A3,信息人员资料!B:G,MATCH(B2,信息人员资料!B2:G2,),0)”,这是由于向下拖动时引用单元格位置发生了变化,导致match()函数返回值错误导致的。
所以,他使用绝对引用,将match()函数中的单元格位置锁定,将A2单元格中的公式修改为:“=VLOOKUP(A2,信息人员资料!B:G,MATCH($B$1,信息人员资料!$B$1:$G$1,),0)”,然后重新向下复制,得到了正确结果。
但将A2向右拖拉,却发现又得到了错误值。经分析,仍然是单元格引用发生变化的问题造成的。这说明这个公式向向下、向右拖拉复制,就要使用混合引用,而不能简单地使用绝对引用和相对引用。
于是他再次对A2单元格的公式进行修改:“=VLOOKUP($A2,信息人员资料!$B:$G,MATCH(B$1,信息人员资料!$B$1:$G$1,),0)”(向下拖拉时保证match函数仍然引用的是数据表的第一行,向右拖拉时保证vlookup函数查找的依然是A列),然后将公式向右、向下拖拉复制,都得到了正确答案,顺利完成安排的工作任务。 通过上面的步骤,朱贵不仅高效解决了工作上的问题,还对单元格的引用有了更深的认识。于是他在向吴用报告工作完成情况的同时,也报告了他解决这一问题的方法。
Excel学无止境,常学常新,关键是要加强应用。
欢迎大家批评交流