【WPS函数使用】多对一查找问题的新解法

刘航

创作者俱乐部成员

💡

大家好!众所周知,WPS前一阵子在WPS AI官网正式上线了16210版本,添加了11个新函数,这些函数的添加使得有关问题的函数编写简化了许多。这一次的主角是TOCOL函数,让我们来看看TOCOL函数在多对一查询里面有怎么样的用途吧~

  1. 案例引入

现在有这样一张表,A列对应的是房客所在的房间号,B到E列对应的是房间内住客的姓名。现在我们想通过住客的姓名查找其对应的房间号,但是一个房间里对应了多个人,我们怎么样才能根据住客姓名找到对应的房间号呢?

  1. 传统思路1:INDEX索引

一个比较经典的做法就是直接去找姓名对应的单元格所在行,然后利用INDEX或者INDIRECT函数定位房间号所在位置,获取住客所在的房间号。

💡

=INDEX(A2:A5,MAX(IF(B2:E5=G2,ROW(B2:B5)-1)))

我们来简单地讲解一下这个表达式的思路:

  1. 首先用IF函数在B2:E5区域寻找我们要查找的姓名,如果符合条件,返回B2:B5区域所在的行数减1,如果不符合条件则不执行操作。IF函数得到的结果是一个二维数组,其中符合条件的姓名返回行号减1,不符合条件的姓名为FALSE。

  1. 利用MAX函数返回IF函数结果中的最大值,这里需要注意,MAX函数可以忽略逻辑值,所以不用担心FALSE是否会影响运算结果的问题。

  1. 利用INDEX函数对房间号一列进行定位,第一个参数选定房间号区域A2:A5,第二个参数返回A2:A5区域中对应姓名所在的行数-1,即可精准定位到房间号了。

执行结果如下:

  1. 传统思路2:XLOOKUP+MMULT函数

我们利用XLOOKUP函数来尝试一下:

💡

=XLOOKUP(1,MMULT(N(B2:E5=G2),ROW($1:$4)^0),A$2:A$5)

  1. 我们先寻找姓名区域中=要查找的姓名的位置,将其标记为1,其余标记为0(利用N函数实现);

  1. 利用MMULT函数,通过矩阵相乘的思想,将N函数得到的4行4列的矩阵转化为4行1列的矩阵,如果在某一行内找到了对应的名字,那一行的值就为1,其余的位置为0;

  1. XLOOKUP函数寻找这个列向量里面的1,返回1所在位置对应的房间号,即可实现多对一的查找方式。

当然,这两种方法相信大家都已经很熟练了,接下来我们请出文章的主角:TOCOL函数,用新函数解决老问题,有时会有不一样的收获~

  1. 新思路:TOCOL+IF函数组合拳

不知道大家有没有学习TOCOL函数的使用方法,如果还不知道怎么使用TOCOL函数,欢迎移步如下帖子进行详细地学习:


学习链接:

  • 阿滨老师:

【WPS动态数组】第五讲:TOCOL &TOROW函数

  • 泽岩老师:

动态数组:一文讲透数组转换新函数TOCOL TOROW WRAPROWS WRAPCOLS(上)

动态数组:一文讲透数组转换新函数TOCOL TOROW WRAPROWS WRAPCOLS(下)


言归正传,接下来我们看看如何利用TOCOL函数的特性解决题目中的问题。

💡

=TOCOL(IF(B2:E5=G2,A2:A5,1/0),2)

思路解析:

首先我们同样地,利用IF函数在B2:E5区域寻找我们要查找的姓名,如果符合条件,返回A2:A5区域的值,否则返回#DIV/0!错误。接下来,我们利用TOCOL函数,将第一个参数设置为IF函数区域,第二个参数我们输入2,2代表着忽略错误值,这样同样也可以找到对应的房间号。

执行结果如下:

  1. 清奇思路:TOCOL+TEXTBEFORE函数组合

这个解法比较有意思,是我在网络中发现的一种解法,拿出来与大家分享一下。文本处理系列函数是秋季更新的新函数,大家如果还不知道文本处理函数的使用方法,可以移步至以下帖子进行学习:


学习链接:

  • 泽岩老师:

清华学弟函数攻略:一文讲透TEXT函数家族新成员(上)

清华学弟函数攻略:一文讲透TEXT函数家族新成员(下)


我们来看一下最终的函数表达式:

💡

=TOCOL(TEXTBEFORE(A2:A5&B2:E5,G2),2)

接下来我来为大家讲清楚为什么这个做法也是合理的。

  1. TEXTBEFORE函数的第一个参数设置为A2:A5&B2:E5,这个区域返回的结果是一个如下所示的二维数组:

此时大家可以发现,我们把房间号和姓名连接在了一起,没有姓名的位置直接连接了房间号和空单元格。接下来我们在TEXTBEFORE函数中输入第二个参数【分隔符】为我们要查找的姓名G2区域,此时TEXTBEFORE函数返回的结果如下:

此时我们发现,和G2区域匹配的“305贾宝玉”由于存在“贾宝玉”字段,TEXTBEFORE函数可以直接取得“305贾宝玉”前面的数字,其他的单元格由于没有“贾宝玉”字段,所以返回是#N/A错误值。

  1. 接下来我们用TOCOL函数,将第一个参数填写为TEXTBEFORE函数的内容,第二个参数设为2-忽略错误值,我们即可返回“贾宝玉”房客所在的房间号。

执行结果如图:

以上就是为大家分享的多对一查找的几种方式,如果大家还有补充,欢迎大家在评论区积极留言~

如果您有所收获,不要吝啬您的点赞、评论和转发哦~


过往文章指路:

【WPS AI】

【WPS 文字】

【WPS 表格】

北京
浏览 3781
1
17
分享
17 +1
9
1 +1
全部评论 9
 
打卡学习
· 上海
回复
 
666666
· 广东省
回复
 
受教了
· 广东省
回复
 
清华学弟任泽岩

创作者俱乐部成员

我喜欢这种一题多解的玩法帖,期待刘老师更新更多此类教程!
· 辽宁省
1
回复
 
厉害
· 山西省
回复
 
尹俊超

创作者俱乐部成员

航哥🎉🎉🎉
· 河南省
1
回复
 
张俊

WPS函数专家

航哥一出手,就知道有没有!
· 上海
1
回复
 
刘航

创作者俱乐部成员

不好意思,版本号写错了,应该是16120版本
· 北京
2
回复
 
👍🏻厉害
· 浙江省
回复