满足标准的前5个单元的SUMIF

简单的Excel表格如

AB 1 John 5 2 John 7 3 John 9 4 Jill 25 5 John 21 6 John 22 7 Jill 50 8 John 100 9 John 2000 10 Jack 4 

使用SUMIF,我们可以返回分配给John的总数。

 =SUMIF(A:A,"John",B:B) 

有没有办法只返回符合条件的前5个值? 或者有什么办法可以为John回复5个最小值? 要么工作。

好吧。 我会继续,并假定你有Excel 2010或更高版本。

用D1中的“John”,在E1中input这个公式:

= SUMIFS($ B $ 1:$ B $ 10,$ A $ 1:$ A $ 10,D1,$ B $ 1:$ B $ 10中, “<=” &AGGREGATE(15,6,$ B $ 1:$ B $ 10 /($ A $ 1:$ A $ 10 = D1),5))

复制下来,在D2,D3等中给出类似的结果

问候

式:

 =IF(COUNTIF($A$1:A1,A1)<=5,SUMIF($A$1:A1,A1,$B$1:B1),"") 

每个人显示的最后一个值将是该人的第一个(最多)5个值的总和。 只需复制并粘贴值然后sorting。

您的样本数据会显示相同的结果,因为约翰的数字是从小到大sorting的前5位或最低5位。 如果情况并非总是如此,或者您需要提供与2010年以前的Excel版本的兼容性,我将提供以下内容。 请注意,在我的示例图片中,我使用了降序排列的数值来说明差异。

对于John的前5个值(样本图像中的E2):

 =SUM(INDEX(($B$2:$B$11)*($A$2:$A$11=D2)*(ROW($1:$10)<=SMALL(INDEX(ROW($1:$10)+($A$2:$A$11<>D2)*1E+99,,), 5)),,)) 

对于John的最低5个值(样本图像中的F2):

 =SUMPRODUCT(SMALL(INDEX(($B$2:$B$11)+($A$2:$A$11<>D2)*1E+99,,),ROW($1:$5))) 

这些是标准的公式。 任何数组处理由INDEX和/或SUMPRODUCT 。 Ctrl + Shift + Enter 不是必需的。 当less于5个匹配值时,可能需要某种forms的错误控制; 一个简单的IF(COUNTIF(), <formula>)就足够了。 当转录这些types的公式时,需要注意的是,ROW(1:10)是B2:B11或A2:A11中的位置,而不是工作表上的实际行。

在这里输入图像说明

C1中input:

 =IF(A1="John",1,0) 

C2中input:

 =IF(A2="John",1+MAX($C$1:C1),0) 

并抄下来。 然后使用:

 =SUMPRODUCT((A:A="John")*(B:B)*(C:C<6)) 

PIC

假设在D1中的约翰,你可以用这个数组公式得到约翰的5个最小值的总和

=SUM(SMALL(IF(A$1:A$100=D1,B$1:B$100),{1,2,3,4,5}))

CTRL + SHIFT + ENTER确认,然后复制下来,以便在列表中的所有名字上工作