乐于分享
好东西不私藏

EXCEL实战 | EXCEL实现双向查询:支持一对多返回多个结果

EXCEL实战 | EXCEL实现双向查询:支持一对多返回多个结果

在日常Excel工作中,我们经常遇到这样的需求:根据一个值,既要在A列找,又要在B列找——也就是所谓的“双向查询”。

  •  输入A列内容,自动返回B列所有对应结果
  •  输入B列内容,自动返回A列所有对应结果
  •  存在重复数据、一对多多条结果,全部正常溢出展示

最终效果如图:

先看公式

=LET(部门,FILTER(C3:C17,B3:B17=E3,NA()),姓名,FILTER(B3:B17,C3:C17=E3,NA()),IF(ISNA(部门),姓名,部门))

E3是你要查询的值。它会自动判断:如果E3在B列存在,就返回对应的A列值;如果E3在A列存在,就返回对应的B列值。如果两边都找不到,则返回#N/A

公式拆解:一步步看懂它

1. 部门,FILTER(C3:C17,B3:B17=E3,NA())

从 C 列取值,条件是B列等于D2。如果找不到,返回#N/A

2. 姓名,FILTER(B3:B17,C3:C17=E3,NA()),

从B列取值,条件是 C列等于D2。同样,找不到就返回#N/A

3. IF(ISNA(部门),姓名,部门)

  • ISNA(...)判断 部门 的第一个值是否为#N/A
  • 如果是,说明D2不在B列,那就返回姓名。
  • 如果不是,说明D2在B列存在,直接返回部门。

核心逻辑:优先按“B列查 C 列”,如果没找到,再按“C 列查B列”。这样就实现了双向查找。

进阶:如果我想返回整行信息呢?

只需将 部门 和姓名改为整行范围即可。例如:

=LET(部门, FILTER(A2:C10, B2:B10=D2, NA()),姓名, FILTER(A2:C10, A2:A10=D2, NA()),IF(ISNA(部门), 姓名, 部门))

这样返回的是匹配到的整行数据。