从可能包含多个重复值的最小数组中返回多个相邻单元格结果

我试图设置一个公式,将从一个数组中的最小2个结果返回相关单元格的内容(我的相关单元格在另一个工作表上)。 这是我现在使用的。

=INDEX('Sheet1'!$A$40:'Sheet1'!$A$167,MATCH(SMALL(F1:F128,1),F1:F128,0),1) 

 =INDEX('Sheet1'!$A$40:'Sheet1:!$A$167,MATCH(SMALL(F1:F128,2),F1:F128,0),1) 

我碰到的问题是双重的。

首先,如果有多个最低的结果,我会得到两个条目中排在第一的数组。

其次,如果第二个最低的结果是重复的,但第一个不是,我会得到第一个显示在列表中的任何一个,但是后面的任何重复都会被忽略。 我希望能够显示与重复分数相关的名称。

您必须调整SMALL函数的k参数,以便根据重复值来提高k值 。 COUNTIF函数应该足够了。 一旦检索到前两个分数的所有事件,就可以应用标准的“查找多个值”公式。 使用AGGREGATE¹函数检索连续的行位置并将其传入名称的INDEX中效果很好。

top_2_scores

H2:I2中的公式是,

 =IF(SMALL(F$40:F$167, ROW(1:1))<=SMALL(F$40:F$167, 1+COUNTIF(F$40:F$167, MIN(F$40:F$167))), SMALL(F$40:F$167, ROW(1:1)), "") '◄ H2 =IF(LEN(H40), INDEX(A$40:A$167, AGGREGATE(15, 6, ROW($1:$128)/(F$40:F$167=H40), COUNTIF(H$40:H40, H40))), "") '◄ I2 

根据需要填写。 分数devise为在最后一位之后终止,因此填写多行比将来重复所需要的更多是一个好主意。


¹Excel2010²引入了AGGREGATEfunction 。 它在早期版本中不可用。
² 有关xl2010之前的函数的相关文章 – 请参阅INDEX()中的多个排名返回 。

下面的公式将做我想要的东西:

 =IF(OR(ROW(1:1)=1,COUNTIF($E$1:$E1,INDEX(Sheet1!$A$40:$A$167,MATCH(SMALL($F$1:$F$128,ROW(1:1)),$F$1:$F$128,0)))>0,ROW(1:1)=2),INDEX(Sheet1!$A$40:$A$167,MATCH(1,INDEX(($F$1:$F$128=SMALL($F$1:$F$128,ROW(1:1)))*(COUNTIF($E$1:$E1,Sheet1!$A$40:$A$167)=0),),0)),"") 

  1. 这是一个数组公式,并且必须用Ctrl-Shift-Enter确认。
  2. 有两个参考$E$1:$E1 。 该公式假设它将被input到E2中并被复制下来。 如果它在不同的列中更改这两个引用。 它必须在第二行或通过循环引用。

它会做什么

如果第一名有一个平局,那么只会列出那些并列第一的球队。

如果只有一个第一名,而第二名并列第二名,则会列出第二名。

因此,请确保将公式复制到足以覆盖所有可能的关系。 它会把""填入任何不填补的地方,所以错误的偏高。

为了得到分数使用这个简单的公式,我把它放在列F:

 =IF(E2<>"",SMALL($F$1:$F$128,ROW(1:1)),"") 

再次将E引用更改为用于输出的列。

我做了一个小testing:

![在这里输入图片描述