电脑教程
位置:首页>> 电脑教程>> office教程>> excel如何从列表中返回满足多个条件的数据

excel如何从列表中返回满足多个条件的数据

  发布时间:2023-04-12 04:41:52 

标签:excel公式技巧,Excel函数,excel数据透视表,Excel教程

在实际工作中,我们经常需要从某列返回数据,该数据对应于另一列满足一个或多个条件的数据中的最大值。

如下图1所示,需要返回指定序号(列A)的最新版本(列B)对应的日期(列C)。

excel如何从列表中返回满足多个条件的数据

图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

0
投稿

猜你喜欢

  • 朋友发来一篇Word文档,里面有很多精美的图片,想把这些图片保存下来,以便以后不用打开Word就可以欣赏它们,怎么保存这些图片呢?一开始,笔
  • “急急急,word文档打不开,有没有解决方法?”“有!”Word是我们日常办公和学习的小助手,我们经常需要用到它来编辑文档。但是呢,最近有白
  • 大家在使用Excel2007编辑工作表格时经常要输入大量数据,有时要求输入的这些数据是不允许重复的,例如常见的身份证号码等,一旦错误输入查找
  • excel怎么自动求和1、先说自动求和吧,注意我用的excel是2007版,表格如图,比较简单,我要计算数1和数2的和   &nb
  • 有很多经常使用办公软件的网友会碰到一个这样的问题:每次我在Word 里添加页眉,它都会自动在下面加条横线。我有什么办法可以去掉它吗?那么下面
  • 我们在下载使用软件的时候,经常会遇到dll文件缺失无法正常运行的情况,遇到这个问题时会根据错误提示去下载对应的dll文件。但是问题来了,要如
  • 看到一些网页做得不错,想“借来”加入自己的网站中。可是许多网页却做了限制,一旦“另存为”,就会出错退出,让人郁闷不已。针对这种限制,虽然有不
  • 中国汉字多种多样,不可能每个人都认识所有的字,尤其是一些文化教育程度相对较低的地方,很多常用字都不会读,这样就给交流带来了极 * 烦,对于这样
  • 投影仪可以更好的方便用户进行办公或者讲解使用,那么在win10系统中,要怎么设置投影仪连接呢?简单几步分享给大家。win10专业版怎么连接设
  • 在Word中,连续输入三个“=”,按下空格键或回车键,可以得到一条双线横线,连续输入三个“-”,则可以得到一条单线横线,连续输入三个“~”,
  • VLOOKUP函数的第3个参数指定想要返回的值的位置。例如,如果想要从所查找区域的第2个位置或第2列返回金额,则应指定该参数为2。图1从图1
  • 很多用户更新到win10系统之后发现想要更新新的系统版本,但是一直没有收到系统推送的更新提示。发生这种情况,小编觉得可以使用检测系统更新,或
  • word文档中插入电子印章,怎么设置才能有如同实际纸上盖章,公章压在字上的效果呢?那么下面就由小编给大家分享下word中加入公章的技巧,欢迎
  • 近期有网友求助说在家看着电影突然黑屏了是怎么回事?这个时候要分清楚情况,找到原因对症下药就能轻松解决啦,接下来小编教你看视频黑屏解决方法!一
  • 1.由于正在普通视图或大纲视图中工作。解决方法:若要查看页眉、页脚或图形对象等对象在打印页中的位置,请切换到页面视图。若要查看这些对象在 W
  • 1、打开word文档,随后点击界面上方的设计按钮2、在接着进入的界面中点击右侧的页面边框3、在接着自动打开的对话框中点击【无】按钮结果如图所
  • Word文字怎么变成PPT演示文稿word里的一级对应ppt里的大标题,word里的二级对应ppt里的正文部分的一级标题,word里的 * 对
  • 这篇文章主要介绍了office 2010 toolkit错误提示Failed to inject memory的完美解决方法,需要的朋友可以
  • 在使用excel的过程中,经常会遇到两个表格相加的情况,有的朋友就重新建个表格,然后对两个表格的数据进行相加,填写到一个表格里面,实际上有更
  • 插入完整的excel表格操作步骤:1、打开word文档;2、点击插入选项卡;3、点击文本功能区,对象按钮;4、弹出对象对话框,点击由文件创建
手机版 电脑教程 asp之家 www.aspxhome.com