专栏名称: EasyCharts
EasyCharts,易图表,我们将定期推送各种数据可视化与分析教程,包括Excel(Power BI)、Origin、Sigmaplot、GraphPad、R、Python、Matlab、Tableau、D3.js等。
目录
相关文章推荐
前端早读课  ·  【开源】TinyEngine开启新篇章,服务 ... ·  昨天  
前端大全  ·  Create React ... ·  5 天前  
云南省人民政府  ·  在线访谈丨我省如何构建国土空间新格局?省自然 ... ·  4 天前  
云南省人民政府  ·  在线访谈丨我省如何构建国土空间新格局?省自然 ... ·  4 天前  
51好读  ›  专栏  ›  EasyCharts

XLOOKUP真要取代VLOOKUP?别闹了

EasyCharts  · 公众号  · 前端  · 2019-09-04 22:29

正文

这两天,ExcelHome论坛和QQ学习群、微信学习群里,一个刚刚诞生在襁褓中的新函数,凭借着大哥VLOOKUP和二哥LOOKUP的名声火了一把,来看看这个函数的微软帮助文件界面吧:

老祝看了一下,大致的用法是:

=XLOOKUP(查找内容,查找区域,要返回的区域,[匹配方式],[搜索模式])

其中的匹配方式有四种:

0,精确匹配

-1  ,如果未找到查询值, 则返回比查询值小的下一个项目。

1,如果未找到查询值, 则返回下一个较大的项目。

2,表示使用通配符匹配。


还有一个参数是搜索模式,也有四个参数可选,其中:

1,表示从第一个项目开始执行搜索。

-1,表示从最后一个项目开始执行反向搜索。

2,表示在查找区域为升序的前提下搜索。

-2,表示在查询区域为降序的前提下搜索。 如果未排序, 将返回无效的结果。


看起来这个函数的功能与LOOKUP十分相似,应该属于LOOKUP的加强版。这么有吸引力的新函数,到底什么时候大家才可以使用呢?

看看微软的提示:

敲黑板,划重点:

XLOOKUP现在还只是测试版, 一个 襁褓中的娃,只有在后续优化后,Office 365用户才会有机会体验。根据以往微软的尿性,老祝预测普通用户应该 还要等待3年 也就是在Office 2022版本中, XLOOKUP 才有可能成为内置函数。

并且,使用过程中不得不考虑与低版本用户的兼容性,否则你这边做出的表格,老板打开是乱码,客户打开是乱码,这不就乱套了吗?综合这些原因, XLOOKUP函数的普及应该还有很长的路要走


那些张口就说VLOOKUP要下岗、比VLOOKUP好用二 倍等说法,目前看还是为时过早的。


说起查找引用类函数,很多小伙伴们会先想到大众情人VLOOKUP函数,但在实际应用中,很多时候VLOOKUP却是力不从心: 比如说从指定位置查找、多条件查找、逆向查找等等。

这些VLOOKUP函数实现起来颇有难度的功能,有一个函数却可以轻易实现,这就是下面咱们要说的主角——LOOKUP。

这个函数主要用于在查找范围中查询指定的查找值,并返回另一个范围中对应位置的值。 该函数支持忽略空值、逻辑值和错误值来进行数据查询,几乎可以完成VLOOKUP函数和HLOOKUP函数的所有查找任务,接下来咱们就一起看看LOOKUP函数的常用套路。


一、返回B列最后一个文本:

=LOOKUP("々",B:B)

或是

=LOOKUP("做",B:B)


二、返回B列最后一个数值:

=LOOKUP(9E+307,B:B)


三、填充合并单元格

如下图所示,B列姓名使用了合并单元格,使用以下公式可以得到完整的填充:

=LOOKUP("做",B$2:B2)


四、返回A列最后一个非空单元格内容

=LOOKUP(1,0/(A:A<>""),A:A)

简单说说公式的计算过程:

先使用A:A<>""判断A列是否不等于空单元格,得到一组有逻辑值TRUE和FALSE构成的内存数组。

然后用0除以这些逻辑值,在四则运算中,逻辑值TRUE相当于1,FALSE相当于0,相除之后,得到由错误值和0构成的新内存数组。 其中的0,就是0/TRUE的结果,表示符合条件。

最后用1作为查找值,在这个内存数组中找到0的位置,并返回第三参数中对应位置的内容。

如果有多个符合条件的记录,LOOKUP默认以最后一个进行匹配。


五、逆向查询

如下图,要根据E3单元格的商品名称,查询对应的销售经理。 公式为:

=LOOKUP(1,0/(C2:C10=E3),A2:A10)

单条件查询的模式化写法为:

=LOOKUP(1,0/(条件区域=条件),查询区域)


六、多条件查询

如下图,要根据F3单元格的商品名称和G3单元格的部门,查询对应的销售经理。 公式为:

=LOOKUP(1,0/((D2:D10=F3)*(B2:B10=G3)),A2:A10)

多条件查询的模式化写法为:

=LOOKUP(1,0/((条件区域1=条件1)*(条件区域2=条件2)),查询区域)


七、模糊查询等级

如下图,要根据B列销售业绩返回对应的评定标准,E~F列为标准对照表。

C2单元格公式为:

=LOOKUP(B2,$E$3:$F$6)

这种方法可以取代IF函数完成多个区间的判断查询,前提是对照表的首列必须是升序处理。


八、提取有规律的数字

如下图,要提取出B列混合内容中的数值。

公式为:

=-LOOKUP(1,-RIGHT(B2,ROW($1:$9)))

本例中,数值都位于右侧,因此先用RIGHT函数从B2单元格右起第一个字符开始,依次提取长度为1至99的字符串。

添加负号后,数值转换为负数,含有文本字符的字符串则变成错误值。

LOOKUP函数使用1作为查询值,在由负数、0和错误值构成的数组中,忽略错误值提取最后一个等于或小于1的数值。 最后再使用负号,将提取出的负数转为正数。


九、带合并单元格的查询

如下图,根据D2单元格的姓名查询A列对应的部门。

公式为:

=LOOKUP("做",INDIRECT("A1:A"&MATCH(D2,B1:B10,0)))

MATCH(D2,B1:B10,0)部分,精确查找D2单元格的姓名在B列中的位置。 返回结果为7。

用字符串"A1:A"连接MATCH函数的计算结果7,变成新字符串"A1:A7"。

接下来,用INDIRECT函数返回文本字符串"A1:A7"的引用。

如果MATCH函数的计算结果是5,这里就变成"A1:A5"。 同理,如果MATCH函数的计算结果是10,这里就变成"A1:A10"。 也就是这个引用区域会根据D2姓名在B列中的位置动态调整。

最后用=LOOKUP("做",引用区域)返回该区域中最后一个文本的内容。

简化后的公式相当于:

=LOOKUP("做",A1:A7)

返回A1:A7单元格区域中最后一个文本,也就是江北公司,得到“苏明哲”所在的部门。


好了,咱们今天的内容就是这些吧,祝小伙伴们一天好心情~


图文作者: 祝洪忠

如需联系EasyCharts团队

请加微信: EasyCharts


【书籍推荐】







请到「今天看啥」查看全文