于佳含
[摘要]在多条件查询方面,LOOKUP函数具有强大功能,本文通过对LOOKUP函数模糊查询及跳过错误值属性的分析,运用TRUE和FALSE在EXCEL中的运算规则,对多条件查询中出现的各种问题提出相应解决思路及一些建议。
[关键词]EXCEL LOOKUP函数 多条件 查询
[中图分类号]TP3 [文献标识码]A [文章编号]1009-5349(2016)18-0162-02
LOOKUP函数、VLOOKUP函数、HLOOKUP函数属于同系列查询函数,是EXCEL软件中的重要查询工具,其中,VLOOKUP函数最为常用,称其为查询函数的半壁江山也不为过。但是VLOOKUP函数在使用上存在一定局限性,例如只能满足一个查询条件,且要求“lookup_value”必须对应“table_array”的第一列,另外,第一个参数“lookup_value”必须是唯一值,如果“lookup_value”中出现重复值,其查询结果就会大打折扣。即对查询基础数据提出了唯一值和结构顺序两个条件,对于不符合VLOOKUP函数要求的数据来说,使用前必须做好前期工作,比较麻烦。而利用LOOKUP函数进行查询,可以同时满足多个条件,通过对不同条件的筛选避免重复利用同一数值,对数据列顺序也没有特殊要求,对于重复值多且不能轻易更改数据列顺序的数据来说,LOOKUP函数的操作更为方便,查询结果更加准确。
一、LOOKUP函数
LOOKUP函数是EXCEL中的常用查找函数,有向量和数组两种语法形式。向量形式是在单行区域或单列区域中查找数值,然后返回第二个单行区域或单列区域中相同位置的数值,公式为“=LOOKUP(lookup_value,lookup_vector,result_vector)”;数组形式在数组的第一行或第一列查找指定的数值,然后返回数组的最后一行或最后一列中相同位置的数值,公式为“=LOOKUP(lookup_value,array)”。在这两种语法形式中,向量形式在多条件查询中的应用最为广泛。
以表1中左侧表为数据源表,查询满足右侧表所列条件人员的出生日期,需要同时满足对应学院、姓名两个条件,这就应用到了LOOKUP函数的多条件查询功能。
二、TRUE和FALSE在EXCEL中的运算规则
以表1中L6单元格为例,查询L6的值需要满足的第一个条件是部门为“政法学院”,即需要找到B列中值为“政法学院”的单元格所在行。为使查询结果一目了然,可在F列设置辅助列,因J6值在拖拽中不可发生变化,所以需要对J6进行绝对引用,则F2公式为“=B2:B16=$J$6”,表示B2至B16区间是否等于J6(政法学院)值的显示结果。向下拖拽后,显示“TRUE”则为相同值,显示“FALSE”则为不同值,如表2。
同理,查询L6的值需要满足的第二个条件是姓名为“王云”,即需要找到C列中值为“王云”的单元格所在行。同样设置辅助列G列,绝对引用K6单元格,则G2公式为“=C2:C16=$K$6”,表示C2至C16区间是否等于K6(王云)值的显示结果。如表2。
在EXCEL中,TRUE被当做“1”来运算,FALSE被当做“0”来运算,因此,根据以上公式显示结果,F列可表示为“0,0,0,0,0,1,1,1,1,1,0,0,0,0,0”;F列可表示为“0,0,0,0,0,0,0,0,1,0,0,0,0,0,0”。F列中“1”为满足部门为“政法学院”的第一个条件,G列中的“1”为满足姓名为“王云”的第二个条件,想要同时满足以上两个条件,必须使F列和G列同一行上的结果皆为“1”。根据“1*1=1,1*0=0,0*0=0”的运算规则,可以将F列单元格与G列对应单元格相乘,设H列为辅助列,则H2公式为“=F2*G2”,向下拖拽后得到结果为“0,0,0,0,0,0,0,0,1,0,0,0,0,0,0”,如表2,显示为1的单元格所在行即为查询结果所在行。根据计算结果,只有H10单元格显示为“1”,其余全部显示为“0”,由此可见,H10单元格所在行就是查询结果所在行,即D10为查询结果,也就是L6单元格所求的值。
通过以上分析,根据向量公式“=LOOKUP(lookup_value,lookup_vector,result_vector)”,“lookup_value”可以设为“1”,“lookup_vector”需满足学院为“政法学院”且姓名为“王云”两个条件,可设为“($B$2:$B$16=J6)*($C$2:$C$16=K6)”,“result_vector”为D2至D16区间,对相应区间进行绝对引用后,即L6的公式可以写为“=LOOKUP(1,($B$2:$B$16=J6)*($C$2:$C$16=K6),$D$2:$D$16)”。
三、模糊查询
将以上公式写入L6单元格后,通过与数据源表核对,不难发现这个结果是错误的。数据源表中政法学院王云的生日是1982年4月15日,而运用上文所写公式查询到的结果却是1982年9月16日,之所以出现这样的差别,其原因就在于LOOKUP函数的属性——模糊查询。
与LOOKUP函数系列中的VLOOKUP和HLOOKUP不同,LOOKUP函数没有设定精确查询或模糊查询的参数“range_lookup”,所以全部默认模糊查询。如果LOOKUP函数找不到“lookup_value”,则查找“lookup_vector”中小于或等于“lookup_value”的最大数值。因此,想要得到精确的查询结果,需要采取一些特殊的方法。
LOOKUP函数还具备另外一个比较重要的属性——跳过错误值。虽然模糊查询不能够精准地定位正确值,但如果将不符合条件的值全部变成错误值,则LOOKUP函数就会跳过这些错误值,别无选择地直接提取正确值。根据这个思路,屏蔽错误值就成为了利用LOOKUP函数进行多条件精确查询最为重要的一个环节。
四、屏蔽错误值
以L6为例,根据上文,在“lookup_vector”公式“($B$2:$B$16=J6)*($C$2:$C$16=K6)”中,TRUE为“1”,FALSE为“0”,只有TRUE与TRUE相乘其结果才能为“1”,只要有一个FALSE存在,其相乘的结果即为“0”。在数学运算中,0可以做被除数,但却不可以做除数,即“0/1=0”,但“0/0”却是错误的写法。在EXCEL中,输入“=0/0”返回的也是错误值,显示为“#DIV/0!”。因此,根据这个规则,可以把表示“lookup_vector”部分的公式整体作为除数,如果公式结果返回“1”,则除数成立,其所在行即为正确值所在行,如果公式结果返回“0”,则除数不成立,最终将返回错误值“#DIV/0!”,进而被LOOKUP函数屏蔽掉。由此,L6单元格中“lookup_vector”部分的公式可以写为“0/(($B$2:$B$16=J6)*($C$2:$C$16=K6))”。
五、多条件查询
通过上文对TRUE、FALSE、模糊查询及屏蔽错误值的分析,可以分析出L6单元格的最终公式为“=LOOKUP(1,0/(($B$2:$B$16=J6)*($C$2:$C$16=K6)),$D$2:$D$16)”。得出结果为1982年4月15日,与数据源表相符,即唯一正确值。值得一提的是,在基础数据中,很容易出现多个重复值,同一学院甚至也有同名同姓的情况存在。为保证查询结果的准确性,需要对多个条件同时进行筛选,只有同时满足多个条件,才能作为查询结果列出。以表2为例,如果政法学院有两个王云,其中一位职称为助教,另一位职称为讲师,则利用职称不同这个已知条件就可以将两人区分开来。查找王云助教,公式可按照“=LOOKUP(1,0/((区域1=政法学院)*(区域2=王云)*(区域3=助教)),目标查询区域)”列出,查找王云讲师,公式可按照“=LOOKUP(1,0/((区域1=政法学院)*(区域2=王云)*(区域3=讲师)),目标查询区域)”列出。如果还是存在重复值,则可以此类推,依次将已知条件列在公式中,对重复值进行更为精确的筛选,直至查找到最终结果。由此,可得出利用LOOKUP函数进行多条件查询的通用公式为“=LOOKUP(1,0/((区域1=条件1)*(区域2=条件2) *(区域3=条件3)*(……)),目标查询区域)”,其中,“区域1/2/3……”和“目标查询区域”均需要绝对引用。
综上所述,利用LOOKUP函数进行多条件查询,不仅需要考虑到函数本身为模糊查询的属性,还要将混淆正确值的其他值一一进行错误值处理,只要解决以上两点,LOOKUP函数就可以发挥其强大的功能,使查询工作达到事半功倍的效果。值得注意的是,在使用LOOKUP函数时,需要对条件区域和目标查询区域进行绝对引用,避免取值区域混乱。正确运用LOOKUP函数进行多条件查询,不仅可以加强查询准确率,对提高工作效率也有很大的帮助。
【参考文献】
[1]Excelhome.实战技巧精粹:Excel2010 函数与公式[M].北京:人民邮电出版社,2014.
[2]Excelhome.Excel2010实战技巧精粹[M].北京:人民邮电出版社,2013.
[3]周贺来.Excel数据处理[M].北京:中国水利水电出版社,2011.
[4]吴爱妤.Excel2007高效办公800招[M].北京:机械工业出版社,2009.1.
[5]王国胜,李春晓编.Excel2010公式与函数辞典606秘技大全[M].北京:中国青年出版社,2012.
[6]伍昊.你早该这么玩excel[M].北京:北京大学出版社,2011.
责任编辑:杨柳