来自求和值的前5个名称取决于单元格值

时间:2017-04-14 02:33:09

标签: excel excel-formula

我的excel表格如下:

A B C D
Name Num1 Num2 ID
a 10 20 1
{{1 } a 20 40 1
b 30 50 2
b 50 10 1
a 10 40 2 b 20 30 1
如何找到ID = 1的前5个名字,其中最高SUM为Num1和Num2。

我想表现的是这样的:

...
No. TopName TotalSum
1. b 110
..等等

我知道怎么总结所有的使用此公式2. a 90得出ID = 1的数字,但无法弄清楚如何找到最高的nums,求和它们并找到名称...
请注意,我有200k +行的数据。< / p>

3 个答案:

答案 0 :(得分:1)

您可以通过两个步骤执行此操作:

第1步

准备一组结果,您可以根据ID列有效地应用过滤器:

F       | G         | H
Name-Id | Num1+Num2 | Rank
a1      | 150       | 5
b1      | 190       | 2
c1      | 140       | 6
d1      | 110       | 10
e1      | 120       | 8
f1      | 120       | 9
g1      | 140       | 7
h1      | 160       | 4
i1      | 180       | 3
j1      | 200       | 1

其中Name-Id是A列中唯一值的连接加上要测试的D列中的值。我在cj的原始示例之上伪造了更多数据。

Num1+Num2的计算方法如下:

=SUMPRODUCT($B$2:$B$33+$C$2:$C$33,--($A$2:$A$33=LEFT($F2,1)),--($D$2:$D$33=VALUE(RIGHT($F2,1))))

那是:

  • Num1范围加上Num2范围,这是您要排名的总和

  • 按照F列左侧字符的0和1数组乘以:Name-Id匹配A列:Name

  • 按照F列右侧字符的0和1数组乘以:Name-Id匹配列D ID

Rank的计算方法是:

=RANK(G2,$G$2:$G$11,0)+COUNTIF($G$2:G2,G2)-1

RANK转换INDEX的输出以获得唯一的排名值。

第2步

通过基于MATCH Name-IdRank查找Name-Id来构建'排行榜',然后从TotalSum获取左手角色{1}}。对于INDEX,只需执行其他类似的MATCHJ | K | L Rank | Name | TotalSum 1 | j | 200 2 | b | 190 3 | i | 180 4 | h | 160 5 | a | 150 即可获得分数。

=LEFT(INDEX($F$2:$F$11,MATCH(J2,$H$2:$H$11,0)),1)

K栏中的公式为:

=INDEX($G$2:$G$11,MATCH(J2,$H$2:$H$11,0))

L栏中的公式为:

Name-Id

实施例

a way

修改

考虑到OP的大数据集(200k +行),您可能希望使用Num1+Num2Rank=IF(COUNTIF(A$3:A3,A3)=1,A3,"") 自动构建表格。下面的方法可以做到这一点,但在表格中留下了空白。但这并不妨碍“排行榜”部分的建设。

使用标准方法查找范围中的值的第一个实例(已排序或未排序):

ID

我们可以扩展为将=IF(COUNTIF(A$3:A3,A3)=1,A3&$G$1,"") 连接到这个:

ID

请参阅下面的屏幕截图,其中G1现在是SUMPRODUCT中的参数 - 可能在工作簿中的任何位置。

现在自动填充此列,我们可以调整基于RANK - 和IF的公式,使其Name-Id语句包含SUMPRODUCT语句,以检查=IF($F3<>"",SUMPRODUCT($B$3:$B$34+$C$3:$C$34,--($A$3:$A$34=LEFT($F3,1)),--($D$3:$D$34=VALUE(RIGHT($F3,1)))),"") 不是空白:

RANK公式:

=IF(G3<>"",RANK(G3,$G$3:$G$34,0)+COUNTIF($G$3:G3,G3)-1,"")

Name-Id公式:

Num1+Num2

排行榜公式保持不变,除非他们需要涵盖RankCOUNTIFID的新扩展范围,而不是前一个示例中的硬编码范围。

更新了屏幕截图,注明了与Name-Id连接的新static公式,以自动生成yourClass.list对列:

enter image description here

HTH

答案 1 :(得分:0)

我认为你应该使用Pivot Table

答案 2 :(得分:0)

如果你想找到最高值,那么简单的就是Max(B2:B20)。

如果你想找到最高价值的话, = Vlookup(Max(B2:B20),A2:D20,1,False)。

如果你想要顶级名字考虑价值, =大(B2:B20,行(1:5))

拖动到5行。

注意它是一个数组公式。

如果你想要求前5个值,

=总和(大(B2:B20,{1,2,3,4,5}))

注意它也是数组公式。