2011-09-01 25 views
1

我有一組數據,看起來像這樣:MS Excel:我如何使Max()更高效?

ID Value MaxByID 
0 32 80 
0 80 80 
0 4 80 
0 68 80 
0 6 80 
1 32 68 
1 54 68 
1 56 68 
1 68 68 
1 44 68 
2 54 92 
2 52 92 
2 92 92 
4 68 68 
4 52 68 
5 74 74 
5 22 74 
6 52 94 
6 52 94 
6 46 94 
6 94 94 
6 56 94 
6 14 94  

我使用{=MAX(IF(A$2:A$100=A2,B$2:B$100))}計算MaxByID列。但是,數據集具有> 100k行,並且大多數是唯一的ID:這似乎是一種非常低效的方法,因爲C:C中的每個單元都必須遍歷A:A中的每個單元。

ID字段是數字,可以排序 - 是否有更智能地找到MaxByID的方法?

回答

4

您可能可以使用數據透視表來查找每個唯一ID的最大值:有關示例,請參閱this link

一旦你有了這張表,VLOOKUP應該使你能夠快速找到MaxByID爲每個ID

+0

這太好了。我不會想到在數據透視表上的VLOOKUP。謝謝! – hardingnj

+1

如果你使用數據透視表的方式,那麼GetPivotData應該比Vlookup快,我懷疑。 –

0

按照ID進行排序後,您可以添加列以獲取每個唯一的起始行號和計數。
這兩個數字允許您計算唯一值範圍的大小和位置。
,那麼你可以使用MAX(OFFSET(StartValueCell,StartThisUnique-1,0,CountThisUnique,1)),以獲得最大

0

這可能會更快

{=IF(A2=A1,C1,MAX(($A$2:$A$24=A2)*($B$2:$B$24)))} 

由於您的數據似乎進行排序,你可以看到ID是否與上面的行匹配,並簡單地將最大值向下複製。