基于两个单词中的任意一个查找第一,第二,第三最大值的数组公式

我有问题find我的问题的解决scheme。 我有一个人类的types列表,我试图然后find与这些人关联的值的sorting,我可以search某些子组的最大值。

例如,

A | B | C 1 Contractor 25 2 Consultant 10 3 Contractor 5 4 Client 30 

在C1中,我现在有以下几乎可以工作的公式,但它只返回“承包商”的值而不是“顾问”。 我应该如何调整这个公式,使其正常工作?

 {=LARGE(IF(ISNUMBER(SEARCH("CONTRACTOR",$a$1:$a$4)), IF(1-ISNUMBER(SEARCH("CONSULTANT",$a$1:$a$4)),$b$1:$b$4)),1)} 

然后,将这个公式拖到我的C:C列,并将结尾“1”更改为“2”,“3”等,以查找遵守search条件的下一个最大值。

请让我知道,如果你有任何澄清问题。

使用AGGREGATE¹函数时,将LARGE子函数和选项6 (忽略错误)设置为14 ,同时强制任何不匹配进入错误状态(例如#DIV/0! )。

 =IFERROR(AGGREGATE(14,6, (B$2:INDEX(B:B,MATCH(1E+99,B:B)))/(A$2:INDEX(A:A,MATCH(1E+99,B:B))={"Contractor","Consultant"}),ROW(1:1)), "") 

ROW(1:1)将变成1,2,3等,因为它被填满。

aggregate_large

通配符匹配

切换到ISNUMBER / SEARCH²函数对,以提供通配符模式匹配。

 =IFERROR(AGGREGATE(14,6, (B$2:INDEX(B:B,MATCH(1E+99,B:B)))/ISNUMBER(SEARCH({"contractor","consultant"}, A$2:INDEX(A:A,MATCH(1E+99,B:B)))), ROW(1:1)), "") 

aggregate_large_wildcard


¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。
²FINDfunction区分大小写。 searchfunction不是。

你可以使用这个数组,并向下拖动(从C1开始):

=IFERROR(INDEX($A$1:$A$4,LARGE(IF($B$1:$B$4<>"",ROW($A$1:$A$4)-ROW(A$1)+1),ROWS(A$1:A1))),"")

作为“奖励”,您可以通过将LARGE更改为SMALL来反转列表