简单的Excel表格,例如
A B
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个值?或者有没有办法返回约翰的5个最小值?要么工作。
答案 0 :(得分:4)
例如D1中的“John”,在E1中输入此公式:
= SUMIFS($ B $ 1:$ B $ 10,$ A $ 1:$ A $ 10,D1,$ B $ 1:$ B $ 10, “&LT =” &安培; AGGREGATE(15,6,$ B $ 1:$ B $ 10 /($ A $ 1:$ A $ 10 = D1),5))
向下复制,为D2,D3等中的名称提供类似的结果
此致
答案 1 :(得分:2)
=IF(COUNTIF($A$1:A1,A1)<=5,SUMIF($A$1:A1,A1,$B$1:B1),"")
每个人显示的最后一个值将是该人的第一个(最多)5个值的总和。只需复制并粘贴值,然后排序。
答案 2 :(得分:2)
当John的数字按升序排列时,您的样本数据将显示前5或最低5的相同结果。如果情况并非总是如此,或者您需要提供与2010年之前的Excel版本的兼容性,我将提供以下内容。请注意,在我的示例图像中,我按降序使用数值来说明差异。
对于约翰的前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)),,))
对于约翰的最低5 值(样本图像中的F2):
=SUMPRODUCT(SMALL(INDEX(($B$2:$B$11)+($A$2:$A$11<>D2)*1E+99,,),ROW($1:$5)))
这些是标准公式。任何数组处理都由INDEX
和/或SUMPRODUCT
提供。 Ctrl + Shift + Enter 不是必需的。当少于5个匹配值时,可能需要某种形式的错误控制;一个简单的IF(COUNTIF(), <formula>)
就足够了。在转录这些类型的公式时,重要的是要注意ROW(1:10)是 B2中的位置:B11或A2:A11,而不是工作表上的实际行。
答案 3 :(得分:0)
在 C1 中输入:
=IF(A1="John",1,0)
在 C2 中输入:
=IF(A2="John",1+MAX($C$1:C1),0)
并复制下来。然后使用:
=SUMPRODUCT((A:A="John")*(B:B)*(C:C<6))
。
答案 4 :(得分:0)
假设在D1中使用John,您可以使用此数组公式
获得John的5个最小值的总和 =SUM(SMALL(IF(A$1:A$100=D1,B$1:B$100),{1,2,3,4,5}))
使用 CTRL + SHIFT + ENTER 进行确认,然后向下复制以适用于列表中的所有名称