如何中excel单元格中返回多个条件的数据
发布时间:2022-06-22 20:45:34
在实际工作中,我们经常需要从某列返回数据,该数据对应于另一列满足一个或多个条件的数据中的最大值。
如下图1所示,需要返回指定序号(列A)的最新版本(列B)对应的日期(列C)。
图1
解决方案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


猜你喜欢
- 在制作WPS表格时,为了使表格更加醒目,需要更改表格线条的样式和颜色,那么WPS表格如何更改线条的样式和颜色呢?下面小编马上分享给大家。WP
- Edge浏览器是微软推出的一款十分优秀的浏览器软件,有不少小伙伴都在使用,不过有小伙伴在使用的过程中突然发现浏览器的主页被篡改了,那么遇到这
- 我相信很多小伙伴会碰到这样的情况,当你使用win10电脑时,他们会不时地向你弹出热门信息。当你做一些更详细的工作,比如设计图纸,修改图片等,
- 上网加速器迅雷快鸟怎么使用,迅雷是一款很不错的资源下载工具。现在迅雷又推出了迅雷快鸟,据说可以让你的网络速度飞起来,那么迅雷快鸟怎么用呢?下
- 除了一些对电脑比较熟悉的人才清楚自己所买的电脑配置是怎么样的,绝大部分的用户买了新电脑也根本不知道自己的电脑配置是怎么样的,跟店家说的是不是
- 1. 安排会议单击“工具”菜单之“联机协作”。注意:如果此时你的WORD中该菜单文字皆为灰色,那么,对不起,它表示你在安装OFFICE200
- 昨天朋友留言问到在Excel中如何制作田字格,其实如果真用Excel做,肯定是可以的,主要就是设置表格的边框线等等操作,Excel的功能主要
- 安装win11 22H2系统会删除原来电脑上的文件吗?win11 22H2版本已经在9月20日推出了,还有很多想安装的用户担心安装win11
- Excel中的裁剪功能具体该如何使用呢?接下来是小编为大家带来的excel裁剪功能的使用方法,供大家参考。excel裁剪功能的使用方法(一)
- 如何将excel中大写英文换成小写?在我们办公日常生活中经常用到office办公软件,对文档信息进行排版,在获得工作效率提升的同时,也常常遇
- Win7中设置电脑自动关机的方法和在XP中差不多,除了可以安装第三廓软件实现自动关机外,还能利用系统自身的任务计划程序来实现,仅需要知道sh
- 以word2007为例,说明如下:1、通过状态栏最右边,计算机时间上面显示比例中的“-”和"+"以及中间的滑块控制。2、
- excel2007的单斜线,或许很多人都会,双斜线却不然,双斜线和弹斜线做法完全不同。下面让小编为你带来excel2007制作双斜线的方法。
- word超链接点击后变色是软件默认的设置,可以更改其设置,使其一直为黑色或其他颜色。1、在Word2007中,打开文档——开始——样式——更
- 近期有部分用户反映自己的电脑出现了系统提示"您的游戏环境异常,请重启机器后再试"的情况,这是怎么回事?对于这一情况应该如何解决呢?我们可以具
- 最近有用户问如果自己的电脑没有光驱,那还能重装系统么?该怎么操作呢?下面小编就为大家具体的讲解没有光驱怎么重装系统,这里小编为大家介绍了三种
- 操作步骤如果我们想把PowerPoint演示文稿中相应的幻灯片转换为图片格式,直接另存就可以了。执行“文件另存为”命令,打开“另存为”对话框
- Word文档是一款非常实用的文字处理软件,在其中我们可以对文本内容进行各种专业化的处理。同时,我们还可以在Word文档中插入表格,图片等内容
- 今日微软面向快速预览通道推出了Windows 10 20H1 18990预览版,并且今天,微软放出了这一版本的ISO镜像。需要的朋友可以来本
- wps是常用的办公软件,不需要通过其他的软件就可以将图片转化成pdf文档,非常方便快捷,那么要怎样做才能做好PPT呢?接下来小编举例简单的例