1、一对多查询。
所谓一对多,就是符合某个指定条件的有多个结果,要把这些结果都提取出来。
如下图所示,希望根据F2单元格中指定的部门,提取出左侧列表中“生产部”的所有人员姓名。
如果你使用的是Excel 2019及以下版本,可以在H2单元格输入以下公式,按住Shift+ctrl不放,按回车,再将公式向下拖动到出现空白单元格为止:
=INDEX(A:A,SMALL(IF(B$2:B$16=F$2,ROW($2:$16),4^8),ROW(A1)))&""
公式有点复杂,具体的解释可参考这里:一对多数据查询,万金油公式请拿好
如果你使用的是Excel 2021,可以在H2单元格输入这个公式,按回车,结果会自动溢出到其他单元格。
=FILTER(A2:A16,B2:B16=F2)
FILTER函数的作用是筛选符合条件的单元格。函数写法为:
=FILTER(要返回内容的数据区域,指定的条件,[没有记录时返回的内容])
本例中,要返回内容的数据区域是A2:A16。
指定的条件是“B2:B16=F2”,这部分对比后,返回一组由逻辑值TRUE或FALSE组成的内存数组。如果数组中的某个元素是TRUE,FILTER函数就返回第一参数中对应位置的内容。
2、提取符合多个条件的多条记录。
如下图所示,希望提取出部门为“生产部”,并且学历为“本科”的所有记录。
如果你使用的是Excel 2019及以下版本,可以在I2单元格输入以下公式,按住Shift+ctrl不放,按回车,再将公式向下拖动到出现空白单元格为止:
=INDEX(A:A,SMALL(IF((B$2:B$16=F$2)*(C$2:C$16=G$2),ROW($2:$16),4^8),ROW(A1)))&""
如果你使用的是Excel 2021,可以在I2单元格输入这个公式,按回车,公式结果会自动溢出到其他单元格。
=FILTER(A2:A16,(B2:B16=F2)*(C2:C16=G2))
本例中,FILTER函数的第二参数使用两组等式,对部门和学历两个条件进行判断,得到两组由逻辑值组成的内存数组。
再将这两个内存数组中的元素对应相乘,如果两个内存数组中同一位置的元素都是TRUE,相乘后结果为1,否则为0,计算后得到一组新的内存数组。如果数组中的某个元素是1,FILTER函数就返回第一参数中对应位置的内容。
3、提取包含关键字的记录。
如下图所示,希望查询学历中包含关键字“科”的所有姓名。不论是本科、专科还是民科,都符合要求。
图片
如果你使用的是Excel 2019及以下版本,可以在H2单元格输入以下公式,按住Shift+ctrl不放,按回车,再将公式向下拖动到出现空白单元格为止:
=INDEX(A:A,SMALL(IF(ISNUMBER(FIND(F$2,C$2:C$16)),ROW($2:$16),4^8),ROW(A1)))&""
如果你使用的是Excel 2021,可以在H2单元格输入这个公式,按回车,公式结果会自动溢出到其他单元格。
=FILTER(A2:A16,ISNUMBER(FIND(F2,C2:C16)))
本例中,FILTER函数的第二参数中,先使用FIND函数查询F2单元格的关键字在C2:C16区域的每个单元格中所处的位置。如果C2:C16区域的单元格内包含有关键字,就返回表示位置的数字。如果没有关键字,FIND函数会返回错误值。
接下来再使用ISNUMBER函数,判断FIND函数的结果是不是数值,返回由逻辑值TRUE或FALSE组成的内存数组。
在某个单元格中包含关键字时,ISNUMBER函数返回的是TRUE,否则返回的是FALSE。
最后使用FILTER函数,返回A列中与TRUE对应位置的内容。
练习文件:
https://pan.baidu.com/s/1-bpkuDJGVRc-_S6-E8LNEA?pwd=6688
评论(0)