excel图表怎么从列表中返回满足多个条件的数据
发布时间:2023-07-08 01:01:11
在实际工作中,我们经常需要从某列返回数据,该数据对应于另一列满足一个或多个条件的数据中的最大值。
如下所示,需要返回指定序号(列A)的最新版本(列B)对应的日期(列C)。
解决方案1:
在单元格F2中输入数组公式:
=INDEX(C2:C10,MATCH(MAX(IF(A2:A10=F1,B2:B10)),IF(A2:A10=F1,B2:B10),0))
注意这里有两个IF子句,不仅在生成参数lookup_value的值的构造中,也在生成参数lookup_array的值的构造中。千万不能忽略了这一要点,即如果采用以下简单方法:
=INDEX(C2:C10,MATCH(MAX(IF(A2:A10=F1,B2:B10)),B2:B10,0))
尽管此公式构造仍可以返回正确的值,但完全不能保证所有情况下都正确。原因是与条件对应的最大值不是在B2:B10中,而是针对不同的序号。而且,如果该情况发生在希望返回的值之前行中,则MATCH函数显然不会返回我们想要的值。
可以将上面的公式解析来验证:
=INDEX(C2:C10,MATCH(MAX(IF({FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE},{4;2;5;3;1;3;4;1;2})),B2:B10,0))
转换为:
=INDEX(C2:C10,MATCH(MAX({FALSE;FALSE;FALSE;FALSE;FALSE;3;4;1;2}),B2:B10,0))
转换为:
=INDEX(C2:C10,MATCH(4,B2:B10,0))
转换为:
=INDEX(C2:C10,MATCH(4,{4;2;5;3;1;3;4;1;2},0))
很显示,数组中的第一个满足条件的值并不是我们想要查找的值所在的位置:
=INDEX(C2:C10,1)
得到:
2013-2-21
这并不是满足我们的条件对应的值。
回到正确的公式:
=INDEX(C2:C10,MATCH(MAX(IF(A2:A10=F1,B2:B10)),IF(A2:A10=F1,B2:B10),0))
转换为:
=INDEX(C2:C10,MATCH(4,IF(A2:A10=F1,B2:B10),0))
转换为:
=INDEX(C2:C10,MATCH(4,IF({FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE},{4;2;5;3;1;3;4;1;2}),0))
转换为:
=INDEX(C2:C10,MATCH(4,{FALSE;FALSE;FALSE;FALSE;FALSE;3;4;1;2},0))
这次,参数lookup_array的数组中出现的最大值4与条件指定的序号相关,公式转换为:
=INDEX(C2:C10,7)
结果为:
2014-10-7
解决方案2:
下面的公式更优雅:
=LOOKUP(1,0/FREQUENCY(0,1/(1+(A2:A10=F1)*B2:B10)),C2:C10)
先看看公式中的:
(A2:A10=F1)*B2:B10
转换为:
({12345;12345;12345;12345;12345;54321;54321;54321;54321}=54321)*B2:B10
转换为:
({FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE})*B2:B10
得到:
{0;0;0;0;0;3;4;1;2}
现在,来到公式中巧妙的部分。为了找到最大值在此数组中的位置(而不是像方案1一样使用MATCH(MAX,…等)组合,那需要重复生成上述数组的子句),进行如下操作:
我们首先给上面数组中的每个值添加一个小值。这是必需的,因为接下来将会对该数组中的值求倒数,如果不执行此操作,则数组中的零将导致#DIV / 0!错误,这会在将数组传递给FREQUENCY函数时使事情更复杂。
这样:
1/(1+(A2:A10=F1)*B2:B10)
转换为:
1/(1+{0;0;0;0;0;3;4;1;2})
得到:
{1;1;1;1;1;0.25;0.2;0.5;0.333333333333333}
这里的关键在于,将此数组作为bins_array参数的值传递给FREQUENCY函数,将零作为参数data_array的值。此时,公式构造:
FREQUENCY(0,1/(1+(A2:A10=F1)*B2:B10))
转换为:
FREQUENCY(0,{1;1;1;1;1;0.25;0.2;0.5;0.333333333333333})
求倒数之前数组中的最大值(即我们关注的值)为求倒数之后数组中的最小值。而且,如果我们传递一个所有值都在0到1之间的值数组作为FREQUENCY函数的参数bins_array的值,将0作为其参数data_array的值,那么零将被分配给参数bins_array中的最小值;其余的为空或为零。
由于数组中的最小值为0.2,在数组中的第7个位置,因此上述公式构造的结果为:
{0;0;0;0;0;0;1;0;0;0}
获得此数组后,我们只需要从列C中与该数组出现的非零条目(即1)相对应的位置返回数据即可。因此,公式:
=LOOKUP(1,0/FREQUENCY(0,1/(1+(A2:A10=F1)*B2:B10)),C2:C10)
转换为:
=LOOKUP(1,0/{0;0;0;0;0;0;1;0;0;0},C2:C10)
转换为:
=LOOKUP(1,{#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!},C2:C10)
得到:
2014-10-7


猜你喜欢
- 今天凌晨苹果举行了秋季新品发布会,现在iOS 12 GM版已经推送,iOS 12 beta用户请不要删除描述文件,检查更新即可升级到iOS
- 微软win10的版本有很多种类,每各种类所对应的人群,用途都不一样。那么这些版本之间具体有什么区别,现在来看看小编给大家带来的win10版本
- DCOUNT函数是一个返回数据库或列表的列中满足指定条件并且包含数字的单元格个数。可以应用在班级考试后,计算及格人数或优秀人数等等。今天,小
- 谈起Python我想很多人并不是很了解,其实它是一款编程语言,它常常被程序员所使用,因此程序员会比较熟。但是对于刚接触它的人来说肯定想了解一
- Word2010中默认情况下,始终显示段落和标记。我们需要进行手动设置才能在显示和隐藏段落标记两种状态间切换。下面由小编为您提供段落标记的显
- 咱们在 操纵Excel表格 停止 一样平常办公时, 常常 需求 建造 林林总总的表格, 建造后 偶然候 需求 停止截图 操纵, 可是 咱们
- 在wps文字中设置纸张的方法:如果出现以下这样的情况: 是因为没有开启print spooler,启用就可以了。
- 最近有小伙伴反应自己的win10原版系统崩溃,无法开机进入安全模式系统内修复,这该怎么办?事实上,我们可以从新的系统下载,用U盘安装,今天小
- 近期有部分用户想要将Win11的开机音乐设置成自己喜欢的音乐,让其更有个性化,但是不知道如何修改。对于这一情况,今天小编就为大家带来Win1
- 欢迎观看 Pixelmator Pro 教程,小编带大家学习 Pixelmator Pro 的基本工具和使用技巧,了解如何在 Pixelma
- 小伙伴们好啊,今天小编为大家准备了一组日常工作中常用的多条件判断、统计Excel函数公式,让同学们提升工作效率,不再头疼。1、IF函数多条件
- 这篇文章主要介绍了Win7中更改系统字体图文教程,有喜欢个性的同学可以使用本文方法更改成自己喜欢的字体,需要的朋友可以参考下在平常的工作中,
- Windows 10快速访问是一个方便的功能。 它不仅列出了最近的文件夹,还包括一些系统文件夹,如文档,下载,图片等。 如果您想重命名快速访
- Softorino YouTube Converter 2是一款macOS和Windows友好的应用程序。它可以立即下载Youtube视频。
- 如何使用笔记本连接投影仪?最近有用户在使用笔记本连接投影仪时出现无法连接的问题,这是怎么回事?笔记本不能连接投影仪该如何解决?情况下文具体介
- win11怎么切换用户账户登录?在win11的使用中,不同的用户账户,都会有自己的独立桌面,这就导致了想要查看不同的数据文件的话,需要进行账
- 每次Win7系统自动更新的时候就会下载一堆更新文件,都是补丁之类的,安装后这些文件依旧占着系统内存,想要删除却不知道位置在哪,所以要先知道W
- 在MS Excel中进行多条件求和需要手工输入公式,对于初学者来说可能有些不便。而在WPS 表格中提供了一个“插入公式”的功能,可以直接在单
- 在Excel中输入太多的重要数据是很多人都有的习惯,这个时候就需要我们对文件进行设置一个密码进行保护。下面是小编为大家带来的excel200
- 在Word2010文档中,用户可以既通过拖动SmartArt图形边框设置SmartArt图形大小,也可以通过输入具体数值设置大小。本例教程分