很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP、INDEX+MATCH中入门的,纵然你把全部的多条件查找方法都学会了而且运用娴熟,如VLOOKUP和&、SUMPRODUCT、LOOKUP(1,0/....,但仍然只能对这种一对多的查询望洋兴叹。

这里讲的INDEX+SMALL+IF+ROW的函数组合,就是解决一对多查询的一种通式,如果你能掌握,那在Excel里基本上就没有什么查询你是实现不了的了(除了INDIRECT+RC引用)。

下面,我们先来看看示例数据和查询要求:

由于VLOOKUP、INDEX+MATCH、LOOKUP(1,0/都只是一对一的查询,有的是只查询第一个,有的是只查找最后一个,所以这种组合对于我们这里的要求完全无用武之地。所以,你也别把精力都花在这个上面,虽然也是可以构造出来的,但今天我们要讲的这个组合,是最基本,也是最容易理解的通式,所以请把精力花在这上面。

问题1,解答:

=IF(ROW(A1)>COUNTIF($B:$B,"Sam"),"",INDEX(A:A,SMALL(IF($B$2:$B$20="Sam",ROW($2:$20)),ROW(A1))))     [公式一]

=IFERROR(INDEX(A:A,SMALL(IF($B$2:$B$20="Sam",ROW($2:$20)),ROW(A1))),"")    [公式二]

=INDEX(A:A,SMALL(IF($B$2:$B$20="Sam",ROW($2:$20),4^8),ROW(A1)))&""    [公式三]


 

首先,这三个都是数组公式,什么是“数组公式”呢?数组公式最特殊也最直接的表现,就是你在单元格里输入完公式之后,要按Ctrl+Shift+Enter三键结束,跟“普通公式”只按Enter结束有明显的区别。

为什么有三个公式呢?其实这三个公式的作用和核心是一样的,只是应对不同Excel版本、不同数据类型所用到的屏蔽错误值的手法有所差异而已。

下面我们着重讲讲[公式三],因为这个结构里函数要素最齐全,而组合也是非常符合我们标题所讲到的。

首先我们来简化和分解一下这个公式:

从上图我们不难看出,这个组合就是由INDEX作为主体函数,第一参数就是我们要查询并返回的数据区域,第二参数就是由SMALL构造的一个公式,而SMALL构造的函数,无非就是由IF判断生成的一个内存array。

如果你没有函数基础的话,估计还是理解不了,那我们先返回IF结构的计算结果,也就是判断B2:B20区域,如果等于“Sam”,就返回对应的所在行号,不相等的话,就返回4^8,就是4的8次方幂,即65,536,这在xls格式文档中,相当于最大行号,在xlsx格式则不然。

OK,就我们图中的数据,抹黑SMALL函数的array参数,再按F9,不难返回一个内存数组如下:

{65536;65536;65536;65536;6;65536;65536;65536;65536;11;65536;13;65536;65536;65536;65536;18;65536;65536}

简化一下,我们用“极大”来表示65536,那结果就是:

{ 极大;极大;极大;极大; 6 ;极大;极大;极大;极大; 11 ;极大; 13 ;极大;极大;极大;极大; 18 ;极大;极大 }

这个内存数组也就是这个公式组合里最关键的,你可以看到SMALL函数的第二参数是ROW(A1),这个是返回A1单元格所在的行号,也就是1,当我们整个公式下拉填充之后,就可以得到ROW(A2)、ROW(A3)、ROW(A4)这样的变化,也就是1、2、3、4 …… 这样的自然数序列,从而可以把上面简化了的内存数组里的6、11、13、18给提取出来,因为6是最小值、11是倒数第二小、13是倒数第三小、18是倒数第四小的值,如果还不明白,那请在单元格里输入“=SMALL(”然后按F1查阅SMALL函数的语法和功能说明。

6、11、13、18代表什么,我们提取出来有什么用呢?回过头去看看IF函数就明白了,原来这就是那些满足条件的记录所在的行号,这样一来我们就可以把一对多的所有符合条件的记录全都提取出来了。

现在回过头来,说说这三个公式都有什么差异和优势?

从上面的分解过程我们也可以看到,其实我们只能凭借下拉公式来得到所有满足条件的所有记录,但具体有多少记录我们不清楚,而且不同的条件返回的记录数量也是不确定的,所以这个公式就决定了我们必须要有容错机制,保证公式下拉之后,不因为返回记录数量的不同而显示多余的0值或者错误值,最常见的如#NUM!。

----------------------------------------------------------

第一个公式比较长,但公式用了一个IF,直接用COUNTIF返回满足条件的记录数量,然后只显示满足条件的记录,公式下拉后其余数量一率用空值表示,而且这里IF函数的False结果可以直接省略以返回FALSE;

第二个公式尤其适用于xlsx格式文档上,直接省略IF的第三参数,因为IFERROR可以涵盖所有错误而不必多费心;

第三个公式只适用在没有特殊格式的数据上,如我们示例数据里的日期、数值,其实都不适合用这个公式,因为我们公式有一个4^8的极大值,而且INDEX函数最后面接了一个&"",其根本目的是为了避免返回65536行里空值通过公式得到0,但这个的间接作用就是将数据直接转化为文本,所以当你要返回的数据里有数值或者日期值,或者其他自定义格式时,就都会被打回原形。。。。

到此为止,你应该基本上能自己应用了吧?如果还不行,那请重读一遍,熟能生巧嘛~~

下面讲讲第二、第三个问题的公式写法,其实会了第一个,第二个依瓢画葫芦是不成问题的,巧妙的是第三个问题,由于我们本身就是在SMALL的第一参数返回一个内存数组,所以第三个问题才突显这个组合的优势。

这里就只讲公式写法而不展开讨论,公式很容易看明白的,只是内在的机理可能需要先去接触学习一下数组公式的基础内容,才容易深化。

问题2,解答:

=IFERROR(INDEX(A:A,SMALL(IF($C$2:$C$20%<50,ROW($2:$20)),ROW(A1))),"")

=IF(ROW(A1)>COUNTIF($C:$C,"<5000"),"",INDEX(A:A,SMALL(IF($C$2:$C$20<5000,ROW($2:$20)),ROW(A1))))

问题3,解答:

=IFERROR(INDEX(A:A,SMALL(IF(MONTH($D$2:$D$20)=3,ROW($2:$20)),ROW(A1))),"")

=IF(ROW(A1)>SUMPRODUCT(N(MONTH($D$2:$D$20)=3)),"",INDEX(A:A,SMALL(IF(MONTH($D$2:$D$20)=3,ROW($2:$20)),ROW(A1))))

然后,而且必须是数组公式,Ctrl+Shift+Enter三键结束,自己书写公式的时候注意绝对引用与相对引用的适当使用,这又属于基本功咯,请加油。

另外这种组合里你可能看到INDEX+SMALL+IF+ROW+COUNTIF,COUNTIF就是用在SMALL函数的第二个参数,这个主要是根据列出的数据的个数,提取第几个的值,对于杂序无指条件的重复值提取,就正好派上用场,具体可以根据自己的使用情况和需求,消化吸收为自己的知识。

from: http://blog.sina.com.cn/s/blog_9b8b66380101gpib.html

转载于:https://www.cnblogs.com/YLuluuu/p/9009452.html

Excel一对多查找相关推荐

  1. Excel如何实现单条件的一对多查找呢

    今天我和大家分享的是:Excel如何实现单条件的一对多查找呢? 我们知道在工作当中的经常用到的查找函数是vlookup,还有一个是index和match的组合嵌套,但是这两种函数只能返回一个查找值,那 ...

  2. Excel图片也能一对多查找输入姓名找到所有图片

    今天小编要让大家快乐的学习excel,要分享的内容是Excel图片也能实现一对多查找,输入姓名找到所有图片的操作 (方方格子插件) 1.先看动图演示吧 2.如下图所示,输入姓名就可以找到该姓名所属的所 ...

  3. vlookup多项匹配_VLOOKUP函数一对多查找,掌握方法后就是这么简单

    如果查找区域中有多个查找对象,用VLOOKUP函数查找时,只返回该列中自上而下第一个查找对象所对应的值. 如下图,我们要查找"总经办"有哪几个人员? 如果直接用VLOOKUP进行查 ...

  4. 用vlookup在excel表格里查找数据

    很容易.我可以为你解释如何使用Vlookup,以便你可以在Excel表格中查找数据.Vlookup是一种Excel函数,用于在表格中搜索和检索特定值.它可以让你更快地找到所需的信息,而不必手动搜索每一 ...

  5. Excel公式-文本查找函数

    Excel公式-文本查找函数 1.查找字符串中指定字符的起始位置 SEARCH与SEARCHB函数 FIND与FINDB函数 2.返回字符串中指定位置的字符 MID与MIDB函数 3.替换字符串中指定 ...

  6. excel 外部链接 乱码_在Excel文件中查找外部链接

    excel 外部链接 乱码 Last week, I opened an Excel file, and was surprised to see a Security Warning. Appare ...

  7. Excel基础(03)查找与替换

    Excel基础(03)查找与替换 一.查找与替换 1.1快捷键 快捷键 说明 ctrl+f 查找 ctrl+h 替换 1.2替换 1. 基本替换 含有关键字都会被替换 出问题了,苏州市变成了苏州市市 ...

  8. Excel 中的查找替换功能

    Excel 中的查找替换功能: https://zhuanlan.zhihu.com/p/143578009 查找替换:将 0 替换为空值 control + H 调出查找替换的窗口 空值在键盘中输出 ...

  9. 如何在excel UiPath中查找范围内的值

    如何在excel UiPath中查找范围内的值 我们经常在自动化业务流程的同时使用 excel 文件. 如果要在该 excel 文件中查找某个范围内的值以获取搜索值的地址. 我们如何才能完成这项任务? ...

最新文章

  1. 谷歌BERT预训练源码解析(三):训练过程
  2. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小
  3. java openldap_java操作OpenLdap示例
  4. php如何在添加div的背景颜色_css3颜色渐变:css3如何实现背景颜色渐变?
  5. Linux集群和自动化维1.4.2 优化Linux下的内核TCP参数以提高系统性能
  6. void readstring( char s[] ); 怎样_char *s和char s[]
  7. 如何安装Windows7多语言支持
  8. VB.NET工作笔记002---asp调用vb6编写的activex dll
  9. MapReduce计算模型(二)
  10. 设计模式和java实现
  11. 升降机用三级液压缸的设计与仿真
  12. FIT2CLOUD飞致云正式推出X-Lab孵化器,首期发布两款开源软件
  13. 基于量子计算的md5密码哈希破解方法
  14. 强势破圈!时尚COSMO联合百度与小红书发布中国美妆地图、美妆种草度白皮书
  15. 共享充电宝再涨价达每小时6元 客服:市场需求决定的
  16. swiper一行多图踩坑
  17. Solar Tracker
  18. 全平台EPUB阅读器-Neat Reader
  19. NOIP 2001 一元三次方程求解(二分||盛金公式)
  20. 《图解TCPIP》<6.3>tcp协议

热门文章

  1. 爬虫python代码-python爬虫(附源码)
  2. python安装教程win8-python 2.7在win8.1上安装的方法
  3. python安装在什么系统下最好-windows系统下Python环境的搭建
  4. python做直方图-python实现直方图的应用
  5. python3.5怎么安装pip-在python3.5中使用pip
  6. python 用途-python主要用途
  7. php和python web开发-Web开发应该学习php还是python
  8. python安装numpy模块-python的numpy模块安装不成功简单解决方法总结
  9. python画饼图-从零开始学Python--matplotlib(饼图)
  10. python程序员工作怎样-12个Python程序员面试必备问题与答案(小结)