天天看点

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

前言

八月底,微软在开发体验版中推出了XLOOKUP,之前已经写了一篇文章介绍VLOOKUP函数的局限性,

惊呆!微软要抛弃VLOOKUP函数了

由于龙逸凡当时没有更新到最新版,没这个函数,只是利用该函数帮助中的示例图片简单地介绍了一下其功能。现在已将Excel更新到最新版。试用了一下,从本人的试用情况来看,有了这个XLOOKUP函数,基本上不用使用VLOOKUP、HLOOKUP了,也在一定程度上替代LOOKUP函数。

与VLOOKUP相比,VLOOKUP函数有的功能,XLOOKUP都有,并且,它还增加了几个关键特性:

1、

可以指定查询的顺序

可以从前往后查,也可从后往前找,满足不同情境下的查找需求。因而可以返回指定条件的第一个,也可返回指定条件的最后一个。

2、如果没找到指定的值,

可以返回最接近的值

(可返回比指定值大的最小值,也可以返回比指定值小的最大值)

3、

既可以纵向查找,也可横向查找

(这一点和LOOKUP一样),即可实现VLOOKUP的功能,也可实现HLOOKUP的功能。

4、XLOOKUP函数不必使用Ctrl+Shift+Enter三键输入,就

可以进行数组运算

(和LOOKUP一样)。所以可以利用这个特点进行很多扩展。比如多条件查找、一次查找多个值、查找第一个文本、查找最后一个数字,等等

现在详细介绍一下其用法,让大家体验一下它的强大。

一、XLOOKUP函数基础知识语法格式:

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
用法示例:
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
注意:

上图是在F2:H3单元格利用XLOOKUP函数在B列查找5,要返回的C列对应的值。当XLOOKUP第四、第五参数分别为0、1和-1时返回的结果是不同的,为了方便大家理解,已将B列的值剔除重复值,升序排列放在E7:E14单元格区域。G2单元格公式:

=XLOOKUP(5,$B$3:$B$14,$C$3:$C$14,-1,1)
           

在B列从上往下查找5,没找到,就返回比它小的最大值(B9单元格的4.5)C列所对应值“甲A7”。G3单元格公式:

=XLOOKUP(5,$B$3:$B$14,$C$3:$C$14,-1,-1)
           

在B列从下往上查找5,没找到,就返回比它小的最大值(B13单元格的4.5)C列所对应值“甲A11”。H3单元格公式:

=XLOOKUP(5,$B$3:$B$14,$C$3:$C$14,1,1)
           

在A列从上往下查找5,没找到,就返回比它等大的最小值(B8单元格的6.3)C列所对应值“甲A6”。

H4单元格公式:

=XLOOKUP(5,$B$3:$B$14,$C$3:$C$14,1,-1)
           

在A列从下往下查找

5

,没找到,就返回比它等大的最小值(B10单元格的6.3)C列所对应值“甲A8”。

查找最接近的数

如果要查找

6

,要返回最接近的值(两者相减,绝对值最小),可以使用下面的公式:

=XLOOKUP(MIN(ABS(6-B3:B14)),ABS(6-B3:B14),C3:C14)
           

这个公式比用LOOKUP更好理解

=LOOKUP(1,0/FREQUENCY(0,ABS(B3:B14-6)),C3:C14)
           

二、典型应用案例

典型应用案例1:返回指定日期的余额

这是财务工作中的实际应用案例。查找5月31日的余额,明细账中没有5月31日,就返回5月11日最后一笔的余额:

=XLOOKUP(E1,$A$5:$A$34,$F$5:$F$34,-1,-1)
           

从下往上找,如果没找到,就返回比它小的最大值对应的数据

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
典型应用案例2:查找适用的个人所得税税率
=XLOOKUP($B5,$D$14:$D$19,E$14:E$19,1,1)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

三、扩展应用

1、逆向查找(从右往左查找):

=XLOOKUP(A14,$B$4:$B$10,$A$4:$A$10)

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
2、替代HLOOKUP横向查找

横向查找公式

=XLOOKUP(A12,B2:F2,B4:F4)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
3、多条件查找
=XLOOKUP($E2&F$1,$A$2:$A$21&$B$2:$B$21,$C$2:$C$21,0,1)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
4、还可打批发,一次查找多个
=XLOOKUP($A$11:$A$13,$A$3:$A$8,$C$3:$C$8)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

外面套一个SUM就可对查找出的多个结果进行求和:

=SUM(XLOOKUP($A$11:$A$13,$A$3:$A$8,$C$3:$C$8))
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

查找多个单元格时,还可以是横向或矩形区域:

=XLOOKUP($A$21:$B$22,$A$3:$A$8,$C$3:$C$8)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
5、纵向横向交叉查询

没有INDEX+MATCH就不能干交叉查询的活了?

XLOOKUP一个人就搞定了!

=XLOOKUP(A11,A3:A8,B3:F8,0,1) XLOOKUP(A12,B2:F2,B3:F8,0,1)
           

上面的公式,两个XLOOKUP之间是一个空格

也可以用下面这个公式实现交叉查询:

=XLOOKUP(A11,A3:A8,XLOOKUP(A12,B2:F2,B3:F8,0,1))
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
6、一个公式就返回多列

=XLOOKUP(A12,$A$3:$A$8,$B$3:$F$8,0,1)

注意,上面公式XLOOKUP的第3参数是一个矩形区域。利用了动态数组的自动溢出功能。

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
7、返回第一个XX值

返回第一个非空单元格的值:

=XLOOKUP(1,--NOT(ISBLANK(A2:A17)),B2:B17)
           

返回第一个文本值:

=XLOOKUP(1,--ISTEXT(A2:A17),B2:B17)
           

返回第一个数字:

=XLOOKUP(1,--ISNUMBER(A2:A17),A2:A17)
           

返回第一个非零值:

=XLOOKUP(1,--(A2:A17<>0),B2:B17)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
8、返回最后一个XX值

返回最后一个非空单元格值:

=XLOOKUP(1,--NOT(ISBLANK(A2:A17)),B2:B17,0,-1)
           

其余类推

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
9、查找最新单价
=XLOOKUP(MAX((B2:B13=E1)*A2:A13),(B2:B13=E1)*A2:A13,C2:C13,0,1)
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...
10、提取唯一值列表

数据表如下:

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

工作表名称为“数据表”,本工作表的A1:E54单元格区域已使用表格功能,命名为“销售明细”。

按出现的顺序提取唯一值列表

=IFNA(XLOOKUP(0,0/(COUNTIF(B$4:B4,数据表!$A$2:$A$54)=0),数据表!$A$2:$A$54),"")

c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

如果用的是新版Excel,其实不用这么复杂,一个UNIQUE函数就搞定了

=UNIQUE(销售明细[客户名称])
           
11、指定条件的唯一值列表

提取“润发国际集团”所销售的产品的列表:

=IFNA(XLOOKUP(0,0/((数据表!$A$2:$A$54=$C$3)*(COUNTIF(B$4:B4,数据表!$C$2:$C$54)=0)),数据表!$C$2:$C$54),"")
           
c++ 编写函数返回两个值最小值_新函数XLOOKUP详解,VLOOKUP自愧不如、自惭形秽、自求下岗...

新版Excel,联用FILTER和UNIQUE函数更简单:

=UNIQUE(FILTER(销售明细[商品名称],销售明细[客户名称]=C3,"商品名称"))
           
新版的Excel有哪些好用的新功能和新函数,请参考下面的链接:

Excel 2019 新增了哪些实用功能?(附正式版下载地址)OFFICE 365的这些功能,颠覆了我对Excel的认知①

OFFICE 365的FILTER函数,颠覆了我对Excel的认知②

OFFICE 365的两个筛选函数,颠覆了我对Excel的认知③

亲,现在都是9102年了,就别再用Excel 2003、Excel 2007、Excel 2010了,不装19,好歹装一个13呗

本文知识点

XLOOKUP函数

UNIQUE函数

FILTER函数

本文首发于微信公众号“

Excel偷懒的技术

”,欢迎大家关注。