上次跟大家讲了,如何用VLOOKUP函数建立《员工档案管理表》。VLOOKUP函数虽然很强大,但其基本用法中只能作正向查找,而不能反向查找,即根据前列查找后列的内容,而不能根据后列查找前列内容。
如我用VLOOKUP函数,可以根据工号来查姓名,但是反过来不行。但如果我用INDEX+MATCH函数组合,可实现双向查找,可顺可逆。
接下来,我们还是以《员工档案管理表》举例,如何根据姓名来查员工信息。
1、设置数据有效性
关键步骤:
数据—数据有效性—允许(序列)—来源(框选数据源)
2、INDEX函数
INDEX翻译成中文的意思是“索引”,INDEX函数是指返回指定区域、指定位置的数值。
INDEX的语法:
INDEX(array,row_num,column_num),指返回数组中指定的单元格或单元格数组的数值。
INDEX(reference,row_num,column_num,area_num),指返回引用中指定单元格或单元格区域的引用。
简单点说就是 INDEX(区域,第几行,第几列),返回区域第几行第几列的数值。
那么,如何用INDEX函数来找出李四的身份证号呢?
关键步骤:
输入INDEX—框选查找区域—李四的身份证号在第3行第3列
做到这一步,很多人会直接往右边复制公式,结果看似和源数据一样,但是换个姓名后面的信息并没有随之变化,所以这样是不可取的。
3、COLUMN函数
身份证号是在源数据的第3列,出生日期是在源数据的第4列,以此类推……
这个时候,我们可以用COLUMN函数来表达列标,即COLUMN()是指查看所选择的某一个单元格所在第几列,即它是第几列。
4、MATCH函数
COLUMN函数解决了列标的问题,行号我们要用到MATCH函数来表示。
MATCH函数的意思是返回目标值在查找区域中的位置,语法为:
MATCH(lookup_value,lookuparray,match-type)
lookup_value:表示查询的指定内容;
lookuparray:表示查询的指定区域;
match-type:表示查询的指定方式,用数字-1、0或者1。
match_type=0(精确查找)
查找精确等于lookup_value的第一个数值,lookup_array按任意顺序排列。一般只使用精确查找。
match_type=1
查找小于或等于lookup_value(目标值)的最大数值在lookup_array(查找区域)中的位置,lookup_array必须按升序排列。
match_type=-1
查找大于或等于lookup_value(目标值)的最小数值在lookup_array(查找区域)中的位置,lookup_array必须按降序排列。
如果我们要查找李四在源数据第几行,可以怎样表示?
关键步骤:
输入=INDEX—框选李四(需查询内容)—框选源数据姓名列(查询的区域)—0-(精确匹配)
5绝对引用
(错误做法)
很多人以为这样就完了,直接向右复制发现公式不适用,那是因为我们没有采取绝对引用。关于绝对引用、相对引用和混合引用这三者的区别,我们举例来说明:
1、相对引用,复制公式时地址跟着发生变化,如C1单元格有公式:=A1+B1
当将公式复制到C2单元格时变为:=A2+B2
当将公式复制到D1单元格时变为:=B1+C1
2、绝对引用,复制公式时地址不会跟着发生变化,如C1单元格有公式:=$A$1+$B$1
当将公式复制到C2单元格时仍为:=$A$1+$B$1
当将公式复制到D1单元格时仍为:=$A$1+$B$1
3、混合引用,复制公式时地址的部分内容跟着发生变化,如C1单元格有公式:=$A1+B$1
当将公式复制到C2单元格时变为:=$A2+B$1
当将公式复制到D1单元格时变为:=$A1+C$1
规律:加上了绝对地址符“$”的列标和行号为绝对地址,在公式向旁边复制时不会发生变化;没有加上绝对地址符号的列标和行号为相对地址,在公式向旁边复制时会跟着发生变化;混合引用时部分地址发生变化。注意:工作薄和工作表都是绝对引用,没有相对引用。
具体操作很简单,选中后按一下F4即可切换到绝对引用。(其他几种引用木模式切换自己可以多按几下F4试试)
6、最后效果
图中可以看到,我们直接搜姓名,相关的员工信息就能显示出来。无论是VLOOKUP,还是INDEX+MATACH函数组合,合适自己需求的才是最好的。技多不压身,多学也无妨!