结构相同的多列数据逆向查询

数据源如下图左表所示,现在的要求是根据F2的身份证号查询对应的姓名。提问者说只有一列数据的话,ta会用index+match来做。可是现在有两列数据就不会做了,问该怎么做?

-01-

简单粗暴法

首先说明下,数据源中的身份证号都是唯一的,不会重复出现的。既然现在只有4列数据,最多查询2次,那就查询2次呗。哪个能查找出来就用哪个。

在G2单元格输入下面的公式就可以了。用了2次index+match,最外面套了个iferror函数。

=IFERROR(INDEX(A:A,MATCH(F2,B:B,)),INDEX(C:C,MATCH(F2,D:D,)))

iferror的第一参数是第1个index+match,用match在B列中查找F2的位置,然后返回A列的姓名。如果找不到就返回错误值。

同样iferror的第二参数是第2个index+match,用match在D列中查找F2的位置,返回C列的姓名。如果找不到返回错误值。

这2个index返回的两个值中总有一个正确的,如果第1个是错误值,iferror就会处理错误,让它返回第2个正确的。如果第1个是正确的,iferror就不会处理。

-02-

问题分析法

如果数据源有更多列,就不能这么简单粗暴的处理问题了。要学会分析问题,找规律。
以下图为例,首先确定F2在A1:D13中的行号和列号。可以看到行号为7,列号为4。如果F2的行号和列号都算出来了,那么它所对应的姓名的行号和列号也可以确定了,对应姓名的行号也为7,列号为3。行号列号都确定了,位置就确定了。

所以现在问题就转化为如何求F2在A1:D13中的行号和列号。

求行号的公式为=SUM((A2:D13=F2)*ROW(2:13))。

求列号的公式为=SUM((A2:D13=F2)*COLUMN(A:D))-1。

最后完整的公式如下,按ctrl+shift+enter。如果你看不懂求行号和列号的公式,可以搜索学习下数组的运算规则那几篇文章。

=INDEX(A:D,SUM((A2:D13=F2)*ROW(2:13)),SUM((A2:D13=F2)*COLUMN(A:D))-1)


-03-
进阶提高法
有一定基础的小伙伴也可以把行号和列号结合起来,用indirect+text来完成。公式如下,按ctrl+shift+enter。

=INDIRECT(TEXT(SUM(IF(B2:D13=F2,ROW(2:13)/1%+COLUMN(A:C))),"r0c00"),)

文件链接:

https://pan.baidu.com/s/1HebvpeoZNbOQGo0LZalshQ

提取码:kugh
(0)

相关推荐