Vlookup作为Excel中匹配函数一哥,使用频率之高,日常工作中我们基本只用到它的查找匹配功能。

下面这两种情况,可以说90%的人都没用过....

它居然可以当成 提取函数和拆分函数来使用。

提取数字

下图中,A列信息中,一个员工存在多个编号,需要提取员工的最新编号,也就是最后面出现的8位数字编号。

B2单元格输入公式:

=VLOOKUP(0,MID(A2&"s",ROW($1:$100),8)*{0,1},2,1)

然后Ctrl+shift+enter三键齐按,完成数组公式的输入,向下填充完成编号的提取。

公式解读:

我们先来看vlookup函数的参数二,查找区域,它是一长串公式:

MID(A2&"s",ROW($1:$100),8)*{0,1}

MID函数是一个字符串提取函数:

语法:MID(要提取的字符串,开始位置,提取长度)

这里要提取的字符串是 A2&"s" ,这里将A2单元格内容加上一个"s",是为了防止以数字结尾、影响vlookup近似匹配的机制(后面进一步解释)

开始的位置从1到100,提取长度为8位(编号长度),公式提取的内容如下所示(未展示完全):

{0,1}是一个一行两列的数组,接着将上面的结果与这个数组运算,得到如下两列内容:

可以发现的是,非数字与0或者1相乘返回“#VALUE!”,数字与0或者1相乘返回0或数字本身

也就是说只有完整的8位数字,才会有值,这样我们就把A2单元格中完整的8位数字提取了出来。

接着利用Vlookup函数在上面的内容中查找数字0,由于使用的是近似匹配,函数会一直向下查找到最后一个0,也就是末尾出现的员工编号。

为啥要在A2后面加一个s?

回到最上面的话题,如果要提取的字符串最后是以数字结尾,比如9,那MID函数最后一个内容是9,与{0,1}运算,结果是{0,9},vlookup函数的近似匹配最终返回9,无法得到正确值。

拆分数字

A列包含6个数字,有正数也有负数,现在需要将每个数字单独提取出来,分别放置于后面的6列内,如下图所示:

B2单元格输入公式:

=VLOOKUP(0,MID($A2,COLUMN(A1)+COUNTIF($A2:A2,"<0"),{1;2})*{0,1},2,0)

然后Ctrl+shift+enter三键齐按,完成数组公式的输入,向右向下填充完成数字的提取。

公式解读:

先看B2单元格:

1、COUNTIF($A2:A2,"<0")计算小于0的个数,A2单元格非负数,这里返回 0

2、COLUMN(A1)+COUNTIF($A2:A2,"<0")返回 1

3、MID($A2,COLUMN(A1)+COUNTIF($A2:A2,"<0"),{1;2}),表示分别取长度1和2,返回一维数组 {"2";"2-"}

4、MID($A2,COLUMN(A1)+COUNTIF($A2:A2,"<0"),{1;2})*{0,1} ,前面的{"2";"2-"}**{0,1}返回二维数组{0,2;#VALUE!,#VALUE!}

5、最后利用vlookup函数匹配0,返回数字2。

公式向右拖动到C2单元格:

1、COUNTIF($A2:B2,"<0"),没有负数,依然返回 0

2、COLUMN(B1)+COUNTIF($A2:B2,"<0")返回 2

3、MID($A2,COLUMN(B1)+COUNTIF($A2:B2,"<0"),{1;2})返回 {"-";"-5"}

4、MID($A2,COLUMN(B1)+COUNTIF($A2:B2,"<0"),{1;2})*{0,1}返回 {#VALUE!,#VALUE!;0,-5}

5、最后利用vlookup函数匹配0,返回数字-5。

公式向右拖动到D2单元格:

1、COUNTIF($A2:C2,"<0"),有一个负数(-5),函数返回1

2、COLUMN(C1)+1返回 4

3、返回{"-";"-8"}

4、返回{#VALUE!,#VALUE!;0,-8}

5、最后利用vlookup函数匹配0,返回数字-8。

............

以此类推提取所有的正数和负数。

小结

以上两种方法皆是利用数组公式构建vlookup函数的匹配区域,原理大同小异,大家可以手动尝试下。

以上就是今天的分享,希望对你有所帮助,我们下期见~