一对多查询:根据一个条件查询多个结果。
一对多查询有着很广泛的应用需求,也是较为复杂的话题。好在Excel2021版本中推出的筛选函数FILTER可以轻松化解。
并不是所有用户都会直接升级到最高版本,不同情况不同版本下的一对多查询模板化公式,仍然是一个值得分享的话题。
高版本一对多查询,一维数据
高版本Excel中的新函数FILTER,按条件筛选数据。
例如,查询市场部的员工,FILTER筛选姓名即可,筛选条件是“市场部”:
=FILTER(B3:B12,C3:C12="市场部")
FILTER一对多查询
低版本一对多查询,一维数据
在没有FILTER的版本中,INDEX+SMALL+ROW是一个经典的组合应用:
=IFERROR(INDEX(B:B,SMALL(IF(C:C="市场部",ROW(C:C),""),ROW(1:1))),"")
IF(C:C="市场部",ROW(C:C),""):返回市场部单元格所在的行号;
SMALL(IF,ROW):下拉过程中分别返回第1小的行号,第2小的行号……
INDEX(SMALL(IF,ROW)):根据上一步返回的行号,从B列提取对应的姓名;
IFERROR则是防止下拉过多产生错误值,省略也不会影响正确数据。
INDEX+SMALL+ROW 一对多查询
高版本一对多查询,二维数据
按部门提取员工姓名并按行显示:
=TOROW(FILTER(B:B,C:C=E3))
FILTER查询,TOROW转为横向显示。
FILTER+TOROW
低版本一对多查询,二维数据
=IFERROR(INDEX($B:$B,SMALL(IF($C:$C=$E3,ROW($C:$C),""),COLUMN(A:A))),"")
公式用法和逻辑上与一维数据雷同,SMALL的第2参数改为COLUMN.
INDEX+SMALL+COLUMN 一对多查询
方法多种多样,以上几个具备一定的通用性。另外还有:
VLOOKUP+COUNTIF+辅助列,允许存在辅助列的场景中是个不错的选择;
TEXTJOIN+IF,适用于将查询结果放到一个单元格个中的场景。