前5个使用列A中的范围与列B的值范围匹配

时间:2016-04-15 18:58:25

标签: excel

[A]  [B]  [C]  [D]  [E]
ABC  DFC  20
DE   DE   12
     GF   11
     ABC  19
     DE   17
     DE   15
     XE   14
     ABC  10

我想在[列B]和[列C]的[列D]和[列E]中使用[列B]中的[列A]中的范围排在前5位。

基于上面的这个例子,[D]和[E]的最终结果如下:

[D]  [E]
ABC  19
DE   17
DE   15
DE   12
ABC  10

提前感谢您的解决方案。

编辑:我应该补充一下。 [A列]是动态的,可以包含第2到6行的值(作为示例)。

2 个答案:

答案 0 :(得分:1)

在单元格E1中并向下复制:

=IF(ROW(E1)>SUMPRODUCT(COUNTIF($B$1:$B$8,$A$1:$A$6)),"",LARGE(INDEX((COUNTIF($A$1:$A$6,$B$1:$B$8)>0)*$C$1:$C$8,),ROW(E1)))

在单元格D1中并向下复制:

=IF(E1="","",INDEX($B$1:$B$8,MATCH(E1,$C$1:$C$8,0)))

两个公式都是常规公式,不需要数组输入。在这两种情况下,请调整B和C列参考以适合您的实际数据。不要使用整列引用。如有必要,请为列B和C范围引用使用动态命名范围

编辑:如果C列的前五位数字的数值有重复,请在单元格D1中使用此公式并复制:

=IF(E1="","",INDEX($B$1:$B$8,SMALL(INDEX(($C$1:$C$8=E1)*ROW($C$1:$C$8),),COUNTIF($C$1:$C$8,"<>"&E1)+COUNTIF(E$1:E1,E1))))

答案 1 :(得分:0)

较新的AGGREGATE function可以帮助检索相应的值,并将相关的行号传递给INDEX function以检索名称。

在E2:F2中作为标准公式,

=INDEX(B:B, AGGREGATE(15, 6, ROW(B$1:INDEX(B:B, MATCH(1E+99, C:C)))/(C$1:INDEX(C:C, MATCH(1E+99, C:C))=F2), COUNTIF(F$2:F2, F2)))
=AGGREGATE(14, 6, C$2:INDEX(C:C, MATCH(1E+99,C:C ))/ISNUMBER(MATCH(B$2:INDEX(B:B, MATCH(1E+99, C:C)), A$2:INDEX(A:A, MATCH("zzz", A:A)), 0)), ROW(1:1))

再填充四行。

top_5_aggregate

请注意,我已更改了您的某个值,以演示如何处理重复项。

相关问题