我的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>
答案 0 :(得分: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列中的值。我在c
到j
的原始示例之上伪造了更多数据。
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
的输出以获得唯一的排名值。
通过基于MATCH
Name-Id
和Rank
查找Name-Id
来构建'排行榜',然后从TotalSum
获取左手角色{1}}。对于INDEX
,只需执行其他类似的MATCH
和J | 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
考虑到OP的大数据集(200k +行),您可能希望使用Num1+Num2
,Rank
和=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
排行榜公式保持不变,除非他们需要涵盖Rank
,COUNTIF
和ID
的新扩展范围,而不是前一个示例中的硬编码范围。
更新了屏幕截图,注明了与Name-Id
连接的新static
公式,以自动生成yourClass.list
对列:
HTH
答案 1 :(得分:0)
答案 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}))
注意它也是数组公式。