如何模糊查找(简称查全称)以及反向模糊查找?
一、模糊查找(简称查全称)
模糊查找这叫法有一点模糊,有人称为“根据简称查找”、有人叫作“包含查找”,实际上都是指查找出包含某文本的值,这个需求在日常工作中还是比较常见,比如有下面一个表:
B1:D10是一个国家或地区的系数表,这个表不规范,将一个组所有的国家都放在一个单元格,现在要查找某个国家所对应的系数,这个国家是包含在某个单元格的内容之中,这就是模糊查找。比如要在G列查找F列国家所对应的系数。
在这种情况下就不能直接使用VLOOKUP,而应该使用通配符来模糊查找。
我们知道,Excel中通配符问号?代表单个字符,而星号*可代表多个字符,要表示包含关系的话我们可在要查找的字符前后都加上*表示包含,比如"*英国*"就表示前后有若干个其他字符,也就是表示包含“英国"二字。因而在上图中,要在G1单元格要查找F1单元格国家的系数,其查找公式为:
=VLOOKUP("*英国*",$C$2:$D$10,2,0)
为了让公式有良好的扩展性,便于往下填充,修改完善为下面的公式:
=VLOOKUP("*"&F2&"*",$C$2:$D$10,2,0)
二、反向模糊查找
有时候,可能存在上面图片相反的情况,比如要提取出D列中车主所购买的车型
这看起来似乎是一个不可能完成的任务。实际上这要用到的就是文章标题所说的反向模糊查找,也就是查找出所包含的值。我们可以使用LOOKUP+FIND来查找,E2单元格公式为:
=LOOKUP(99,FIND($B$2:$B$11,D2),$B$2:$B$11)
要理解这个公式,首先要明白LOOKUP能进行数组运算,而不必按Ctrl+Shift+Enter三键输入。
FIND($B$2:$B$11,D2)的意思是,依次查找B2、B3、B4.....B11单元格内容在D2中的位置,如果没有计算结果为错误值#VALUE! ,如果有的话会显示所查找的位置。E2单元格公式的中间计算结果为:
=LOOKUP(99,{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;15;#VALUE!},$B$2:$B$11)
LOOKUP在一堆错误值和数字组成的列表中查找数值99,会自动忽略掉错误值,最终会找到15,从而返回B2:B11所对应的值“锐界"。
至于为什么是查找99,实际上不一定是99,在这案例中可以是50,也可以是10000,只要是大于D列最大字符数的一个数字都可以。要理解LOOKUP比较 复杂,大家有兴趣的话可以参见
深入理解LOOKUP:LOOKUP函数的查找原理_龙逸凡_新浪博客
http://blog.sina.com.cn/s/blog_4e6c2b960102w59a.html
公式-LOOKUP(1,-LEFT(A1,ROW($1:$10)))详解_龙逸凡_新浪博客
http://blog.sina.com.cn/s/blog_4e6c2b960102w6fd.html
如果理解不了的话,也没什么:)会套用就行了。
三、根据不规范的简称查全称
另外还有一种更复杂的模糊查询,比如根据不规范的简称查找全称,比如根据”中科院“查找出其全称“中国科学院”、根据“偷懒的达人”查找出“《“偷懒”的技术:打造财务Excel达人》”,如下图根据D列的简称查找出A列对应的全称。
其公式为:
=INDEX(A:A,MATCH(0,MMULT(-ISERR(FIND(MID(D1,COLUMN(A:Z),1),$A$1:$A$8)),B1:B26+1),))
在这里就不解释了,有兴趣的话大家使用庖丁解牛的方法将公式各部分一个个拆解来理解。
--------------------