“有关数据查询函数的话题,火箭君也已经提及过多次。但在查询各类信息时,我们总会碰到这样那样的特殊情况,本期我们就来看看如何处理带了特殊符号的单元格,该如何进行查询。
通常情况下,对于一般的信息查询,使用vlookup函数几乎都是能够轻松应对。比如下图中,我们要在A列中搜索E4单元格中的工号,并返回对应B列的姓名。这时只要一个最普通的vlookup就完美解决了。
难题:带特殊符号的查询
上图中,A列的编号中均带有“*”这个符号,因此,即便是在E列的vlookup公式中使用了精确查找模式,依然发生了“找错”的问题。这究竟是为什么呢?
实际上“*”是一个重要的通配符号,因而vlookup函数在工作是将其视作了一个通配符而非一个简单的符号。于是vlookup函数将D4单元格解读成了一个以“SGH021”为起始,又以“1”结尾的字符串。从而导致查询到了错误的结果。
当然这样的问题还不止对于“*”会发生,其他一些特殊符号也会造成查询结果的错误,比如波浪号。
如何解决这个问题?
这时候,就可以邀请Lookup函数出场了。先来看看最终的结果。
在E4单元格中,输入
=LOOKUP(1,0/(D4=$A$2:$A$9),$B$2:$B$9)
立即完美解决所有艰难困苦。原理是什么呢?
实际上,(D4=$A$2:$A$9)利用D4单元格去比对A2:A9单元格的字符串时,会将字符串中的特殊符号视作普通的字符串。从而得到一个{FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE} 这样的数组。
再用0除以这个数组,则得到{N/A,N/A,N/A,N/A,0,N/A,N/A,N/A}这样的结果。
此时,LOOKUP函数要在这么一个数组中查询一个不大于 1 的位置,但数组中没有1,只能找到0的位置。而0的位置又对应B6单元格。从而最终的到了B6单元格的结果。
应该说,整个Lookup函数在处理这个绝对查询问题时,利用的是等式运算中无视通配符的这一特点。
网友评论