1

次のような一連のデータがあります。

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ます。ただし、データセットには 10 万行を超える行があり、ほとんどが一意の ID です。これは、C:C の各セルが A:A のすべてのセルを反復処理する必要があるため、これを行うには非常に非効率的な方法のようです。

ID フィールドは数値であり、並べ替えることができます。MaxByID をよりインテリジェントに見つける方法はありますか?

4

3 に答える 3

0

これはもっと速いかもしれません

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

データは並べ替えられているように見えるため、ID が上の行と一致するかどうかを確認し、最大値を下にコピーするだけです。

于 2011-09-01T18:36:09.387 に答える
0

ID で並べ替えたら、列を追加して開始行番号を取得し、一意ごとにカウントすることができます。
これらの 2 つの数値を使用して、一意の値の範囲のサイズと位置を計算できます。
したがって、 MAX(OFFSET(StartValueCell,StartThisUnique-1,0,CountThisUnique,1)) を使用して最大値を取得できます

于 2011-09-01T17:18:18.210 に答える