暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

听说XLOOKUP要取代VLOOKUP?

数据分析且徐行 2021-09-15
1517
微软最近发布的Excel新函数XLOOKUP,在VLOOKUP的基础上强化了用法,但是目前只有Office 365用户才会有机会体验,普通用户暂时无法使用。

等XLOOKUP真正面市的时候,我们再来一探究竟吧。




本篇主要是罗列了一些VLOOKUP比较冷门(但有时很有用)的用法,基础用法就不赘述了。
刘禹锡在《陋室铭》曾言“山不在高,有仙则名。水不在深,有龙则灵。”同理,技不在乎繁,够用就行。大家不必太在意其中一些复杂的用法,如果有更简便的方式处理,尽管将本文抛诸脑后,不必为了“复杂”而复杂。


- 01 -

模糊查找


模糊查找在很多时候用处也很大,比如给某个数值自动划分优良差等级:


成绩范围

等级

[0,60]

D

[60,80]

C

[80,90]

B

[90,100]

A



公式:

=VLOOKUP($B2,{0,"D";60,"C";80,"B";90,"A"},2)


解析:

  • {0,"D";60,"C";80,"B";90,"A"}构建的是一个二维数组,如下:

0

D

60

C

80

B

90

A

  • VLOOKUP第4个参数若为0或者FALSE,是精确查找;若为1或TRUE(或省略),则为模糊查找,也就是说,如果找不到精确匹配值,它会找到和查找值最接近,但比查找值小的那个数值。比如李四此次成绩为85,但是85不在该二维数组里,与85最接近且比85小的数值为80,于是匹配到等级为B。


- 02 -

反向查找


VLOOKUP要求以从左向右的顺序进行查找,即查找值必须在查找范围的第一列。那我们怎么实现反向查找呢?



公式:

=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),画成表格如下所示:

张三

1001

李四

1002

王五

1003

刘六

1004

韩七

1005

我们可以看到IF({1,0},B2:B6,A2:A6)的作用是将A列和B列进行互换,来迎合VLOOKUP的规则。


- 03 -

多条件查找


有时候我们需要匹配出既符合条件1也符合条件2的列,如下:A班有位学员名字是李四,B班也有位学员名字是李四,但是我们要知道的是A班李四的成绩。


公式:

=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)得到的虚拟二维数组如下:

张三A

90

李四A

85

王五A

77

刘六A

62

韩七B

50

李四B

95

刘六B

41

  • 公式里的花括号{},不是手动输入的,是输完公式后同时按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)相当于输入了一个垂直数组如下:

2

3

4

5

6

  • 接上,COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2)则也会以数组形式返回,如下

COUNTIF($A$2:$A$2,$D2)

COUNTIF($A$2:$A$3,$D2)

COUNTIF($A$2:$A$4,$D2)

COUNTIF($A$2:$A$5,$D2)

COUNTIF($A$2:$A$6,$D2)

  • $A$2:$A$6&COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2)得到的数据如下:

A1

A2

A3

B1

B2

  • IF({1,0},$A$2:$A$6&COUNTIF(INDIRECT("$A$2:$A"&ROW($2:$6)),$D2),$B$2:$B$6)类似之前说的,构造了一个虚拟的二维数组,其格式如下:

A1

张三

A2

李四

A3

王五

B1

刘六

B2

韩七


- 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年,男,青年”为例子:

西安市绿地花苑1幢10

安市绿地花苑1幢100

市绿地花苑1幢1003

......

  • 再以上述数组乘以数组{0,1},数组相乘大家可以参考一下高数里的矩阵相乘

  • 最后使用VLOOKUP基础用法,用0进行查找,返回的结果便是0对应的11位电话号码。


- 最后 -

免费领取模版


需要以上内容的EXCEL模板的,点击阅读原文自行领取即可。



点击“阅读原文,输入提取码c5e3


文章转载自数据分析且徐行,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论