Excel里函数中的万金油,你确定不要点进来看看?
Excel里函数中的万金油,你确定不要点进来看看?
Excel里有个号称“万能”的函数组合,这个函数组合就是INDEX+SMALL+IF,很多应用场合都能看到它们的身影。
这个函数的特点是:能提取出满足某条件或某些条件的所有数据,可以一次性返回单行单列或多行多列的结果。
让我们通过一个实例来认识一下它们到底有多“万能”吧!
1
公式应用情景介绍
如下图,A1:F9单元格为某次考试结果,每个人一行数据。现在需要在B11单元格(棕色底色填充)输入班级名称,在A14:F21区域返回该班级所有学生考试成绩信息。
本例假设需要查询【1班】所有学生的成绩。
2
解决问题思路分析
我们的目的是要提取出A列班级名称与B11单元格内容一致的所有数据,如果:1)能提取出符合条件的所有行数;
2)这些行数能从小到大一个一个的输出;
3)可以从原始数据中按第2步输出的行数把数据引用过来,那么问题就解决了。
恰好,在Excel中存在这么几个函数能达到目的,下面我们来逐个介绍。
3
如何提取出符合条件的所有行数?
我们可以使用IF函数判断来生成所有符合条件的行号数组,如下:
=IF($A$2:$A$9=$B$11,ROW($A$2:$A$9))
$A$2:$A$9=B11判断A列数据是否和B11单元格内容一致,会返回TRUE和FALSE的数组。
如果$A$2:$A$9=B11则返回A2:A9的行号,否则返回FALSE。
本例生成的数组为棕色部分(A2=1班,所以返回A2的行号2,以此类推),按F9可以看到如下数组:
{2;FALSE;FALSE;5;6;FALSE;FALSE;9}
如果要满足多个条件,可以用
=IF((条件区域1=条件)*(条件区域2=条件2),ROW(区域))
这种方式来实现,例如要返回【班级】为“1班”且【总分】>200的查询结果,此部分可以改成:
=IF(($A$2:$A$9="一班")*($F$2:$F$9>200),ROW($A$2:$A$9))
如何顺序输出上一步获得的行号?
由于上一步获得的符合条件的行号数组是数字和FALSE的组合,我们利用SMALL函数就可以逐步输出符合条件的行号。
举例来说,SMALL({11,22,33},1)=11,也就是SMALL返回第一参数中第1(第二参数)小的数字。
同理,SMALL({11,22,33},2)=22。
为了下拉公式方便,我们一般用ROW()函数做SMALL的第二参数,保证下拉公式时自动提取第2小,第3小……
也就是用:
=SMALL(IF($A$2:$A$9=$B$11,ROW($A$2:$A$9)),ROW(A1))
将第一步产生的数组中符合条件的行号从最小的开始连续输出。从下图可以看到,符合条件的行号已经可以连续输出了。
错误值可以先不用关心,后面我们用其他函数屏蔽。
5
接下来,用函数提取数据
最后一步提取数据可以选用的函数比较多,本例介绍INDEX函数方法。
简单说,INDEX函数可以实现从第一参数中提取出第二参数个数据的目的。
例如:=INDEX({11,21,31},1)返回11,也就是从{11,21,31}提取第1个数字;=INDEX({11,21,31},2)返回21,也就是从{11,21,31}提取第2个数字。
那么,我们用(红色部分是上一步SMALL函数,第一个返回值为2):
=INDEX(A$1:A$9,SMALL(IF($A$2:$A$9=$B$11,ROW($A$2:$A$9)),ROW(A1)))
就可以返回A1:A9中的第2个值,也就是第1个“1班”;下拉公式就返回了第2个“1班”……
完成阶段
我们把上一步的函数组合放在查询结果区域的第一列,Ctrl+Shift+enter运行公式,并下拉,结果如下:
这样就获得了班级的返回结果。
后面要获取姓名和各科成绩等信息怎么办呢?
通过分析,我们知道了SMALL函数输出的结果已经固定不变了,现在只需要改变INDEX函数引用的列即可。
因此我们将INDEX函数的第一参数设置成了A$1:A$9【行绝对引用,列相对引用】,这样,我们向右拉动公式就会自动变成B$1:B$9。
完成效果图如下:
屏蔽错误值
可以看到上步产生的结果还有错误值存在,我们用IFERROR函数去屏蔽错误值,如果INDEX函数返回的是错误值,则在单元格返回空。
=IFERROR(INDEX(A$1:A$9,SMALL(IF($A$2:$A$9=$B$11,ROW($A$2:$A$9)),ROW(A1))),"")
这样就最终完成了查询功能的设置。
补充说明
一般还有用INDEX(大区域,SMALL(IF(条件区域=条件,ROW(条件区域),4^8),ROW(A1)))&""这种方式去屏蔽错误值,这种屏蔽错误值的思路是,如果条件区域=条件就返回条件区域行号,否则返回一个比较大的用不到的行号,比如说4^8行或数据区域下面的一个空行行号。这样,INDEX在输出完所有符合条件的行后开始调用4^8行的值(空单元格),为了避免返回0所以再加上一个&""。
本例未使用此种方法,主要是由于后面要查询的其他列有数字,用上述&""的方法数字会变成文本。
如果有日期的时候,日期格式存储的数据会变成一个数字。
Excel里函数中的万金油,你确定不要点进来看看?的更多相关文章
- Excel:函数中的万金油:INDEX+SMALL+IF+ROW
很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP.INDEX+MATCH中入门的,纵然你把全部的多条件查找 ...
- [转]EXCEL截取字符串中某几位的函数——LeftMIDRight及Find函数的使用
原文地址:http://blog.sina.com.cn/s/blog_3f136a180102ymq5.html EXCEL截取字符串中某几位的函数 ——Left MID Right及Find函数的 ...
- 在Excel里如何将多个工作簿合并到一个工作簿中
在Excel里如何将多个工作簿合并到一个工作簿中 当你必须将多个工作簿合并到一个工作簿时,你遇到过麻烦吗?最让人心烦的就是需要合并的工作簿里有很多张工作表.有人能推荐方法解决这个问题吗? 利用VBA ...
- 图解如何 将Excel里的数据导入到sql server数据库中
项目中,经常会碰到如何将Excel里的数据导入到sql server中的问题. 下面,图解如何实现导入Excel中的数据到sql server 2008 R2: Excel截图如下: 查询pub数据库 ...
- excel导出的时候从程序后台写到excel里的是文本,所以无法在excel中计算怎么办?
文章引用自:http://www.cnblogs.com/rayray/p/3414452.html excel导出的时候从程序后台写到excel里的是文本,所以无法在excel中计算怎么办? 需要导 ...
- 浅谈Excel开发:四 Excel 自定义函数
我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比如我想要一个函数能够从WebService上获取某只 ...
- excel VLOOKUP函数的使用方法 .
VLOOKUP函数是Excel中几个最重函数之一,为了方便大家学习,兰色幻想特针对VLOOKUP函数的使用和扩展应用,进行一次全面综合的说明.本文为入门部分 一.入门级 VLOOKUP是一个查找函数, ...
- excel VLOOKUP函数的用法
VLOOKUP函数是Excel中几个最重函数之中的一个,为了方便大家学习,兰色幻想特针对VLOOKUP函数的使用和扩展应用,进行一次全面综合的说明.本文为入门部分 一.入门级 VLOOKUP是一个查找 ...
- Excel 自定义函数
浅谈Excel开发:四 Excel 自定义函数 我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比 ...
随机推荐
- Python 100例(上)
如果你已经把基础看完,可以尝试一下看看以下例子了,如果不会做也不要紧,你要尝试手动把所有的代码都敲一边.别嫌麻烦,因为都是从麻烦到简单的. 实例1: 题目:有1.2.3.4个数字,能组成多少个相互不同 ...
- Django之路: 模版篇
一.Django 模版 上章是介绍简单的把django.http.HttpResponse的内容显示到网页上,下面就介绍以下如何使用渲染模版的方法来显示内容.本节代码是基于Django 1.8,但 ...
- 配置jboss4.2.3GA启用SSL
转帖保存 配置jboss的HTTP请求走SSL(HTTPS协议) l 生成keystore 文件 用keytool生成server.keystore文件: 进入命令行 C:\Docum ...
- after和before的属性妙用
::after或::before设置它们的样式时有一个content这个属性这里可以写attr(data-label)其中data-label是标签上设置的data属性里的数据content:attr ...
- ubuntu中mysql修改编码utf8
摘要:Ubuntu Server 服务器下使用apt-get 命令安装的mysql,默认不是utf8.在这里记录一下如何将编码修改成utf8. 办法解决: 1.查看mysql编码 show varia ...
- 解决:IE中不能自动选择UTF-8编码的解决方法
IE中不能自动选择UTF-8编码的解决办法 在windows操作系统上使用IE作为浏览器时.常常会发生这样的问题:在浏览使用UTF-8编码的网页时,浏览器无法自动侦测(即没有设定“自动选择”编码格式时 ...
- 无源RS232转RS485(转)
源:无源RS232转RS485 RS232 -485转换器主要包括了电源.232电平转换.485电路三部分.本电路的232电平转换电路采用了NIH232或者也可以直接使用MAX232集成电路,485 ...
- 机器学习模型 bias 和 variance 的直观判断
假设我们已经训练得到 一个模型,那么我们怎么直观判断这个 模型的 bias 和 variance? 直观方法: 如果模型的 训练错误 比较大,并且 验证错误 和 训练错误 差不多一样,都比较大,我们就 ...
- 四、Hbase
一.什么情况下使用Hbase 例子: 这里Order By无时不刻的处理,我们要看到刚才的足迹,不能使用缓存技巧. 根据时间戳来查询,显然很快,应为Hbase就是以时间戳来存的. 将最近的数据放在内存 ...
- ajax--2017年1月15日
听说点六下就能复制了? ajax: 一般处理程序(数据接口):ashx 跨语言传递数据:xml: 结构不清晰 代码量比较大 查找起来比较费事 非面向对象结构 json: 结构清晰 代码量相对较小 面向 ...