
- 01 -
模糊查找

公式:
=VLOOKUP($B2,{0,"D";60,"C";80,"B";90,"A"},2)
解析:
{0,"D";60,"C";80,"B";90,"A"}构建的是一个二维数组,如下:
VLOOKUP第4个参数若为0或者FALSE,是精确查找;若为1或TRUE(或省略),则为模糊查找,也就是说,如果找不到精确匹配值,它会找到和查找值最接近,但比查找值小的那个数值。比如李四此次成绩为85,但是85不在该二维数组里,与85最接近且比85小的数值为80,于是匹配到等级为B。
- 02 -
反向查找

公式:
=VLOOKUP(E2,IF({1,0},B2:B6,A2:A6),2,0)
解析:
{1,0}表示一个数组中有两个元素,一个是1(TRUE),另一个是0(FALSE)
如果为1,则返回B2:B6的值,如果为0,则返回A2:A6的值。IF({1,0},B2:B6,A2:A6)得到的二维数组为(B2,A2;B3,A3;B4,A4;B5,A5;B6,A6),画成表格如下所示:
我们可以看到IF({1,0},B2:B6,A2:A6)的作用是将A列和B列进行互换,来迎合VLOOKUP的规则。
- 03 -
多条件查找

公式:
=VLOOKUP(E2&F2,IF({1,0},A2:A8&B2:B8,C2:C8),2,0)
注意:输完公式后同时按Ctrl+Shift+Enter键,而不是直接按Enter
解析:
E2&F2连接在一起整体作为查找值,IF({1,0},A2:A8&B2:B8,C2:C8)得到的虚拟二维数组如下:
公式里的花括号{},不是手动输入的,是输完公式后同时按Ctrl+Shift+Enter得到的。
- 04 -
一对多查找
VLOOKUP函数是一对一查询的,一个班级对应着多个学员,只会匹配出一个学员的姓名,如果要匹配出所有学员的姓名该如何实现呢?

公式:
=IFERROR(VLOOKUP($D2&COLUMN(A1),IF({1,0},$A$2:$A$6&COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2),$B$2:$B$6),2,0),"")
注意:输完公式后同时按Ctrl+Shift+Enter键,而不是直接按Enter
解析:
ROW($2:$6),ROW函数用来得到单元格或单元格区域的行号,当参数为单元格时,返回该单元格的行号,如ROW(C10)=10;如果参数是一个单元格区域,并且作为垂直数组输入,则 ROW 将以垂直数组的形式返回所在行号。所以ROW($2:$6)相当于输入了一个垂直数组如下:
接上,COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2)则也会以数组形式返回,如下
$A$2:$A$6&COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2)得到的数据如下:
IF({1,0},$A$2:$A$6&COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2),$B$2:$B$6)类似之前说的,构造了一个虚拟的二维数组,其格式如下:
- 05 -
提取电话号码
我们知道使用left、right、mid函数截取文本的条件是“符合一定的规律”,当电话号码混杂在一串杂乱无章的文本中时,我们如何把它提取出来呢?

公式:
=VLOOKUP(0,MID(B2,ROW($1:$99),11)*{0,1},2,0)
注意:输完公式后同时按Ctrl+Shift+Enter键,而不是直接按Enter
解析:
ROW($1:$99)构造的是一个从1~99的垂直数组,MID(B2,ROW($1:$99),11)则利用MID函数将文本拆分成分别从第1个字符、第2个字符……第99个字符开始的11位长度的字符串,下面以文本“西安市绿地花苑1幢1003室15623584789居住已3年,男,青年”为例子:
再以上述数组乘以数组{0,1},数组相乘大家可以参考一下高数里的矩阵相乘

最后使用VLOOKUP基础用法,用0进行查找,返回的结果便是0对应的11位电话号码。
- 最后 -
免费领取模版
需要以上内容的EXCEL模板的,点击阅读原文自行领取即可。
点击“阅读原文”,输入提取码c5e3




