0

よろしければ、5 つの名前と 5 つの等級を含む簡単な表を用意します。別の列では、LARGE 関数を使用して成績を並べ替えます。そのようなものを得るために、「順序付けられた」等級のそれぞれの行を知る方法はありますか?

White      23        31       5
Red        15        23       1
Green      23        23       3
Blue       18        18       4
Grey       31        15       2

計算できない列は最後です!

4

4 に答える 4

1

これらの成績をランク付けする場合は、rank() 関数を使用する必要があります。大きくない()。

=RANK(D2,$D$2:$D$6,1)

ランク例

于 2013-04-23T14:18:15.360 に答える
1

これを試すことができます

=MATCH(LARGE(B1:B5,1),B1:B5,0)

結果は行数です...

于 2013-04-23T14:19:15.567 に答える
1

セル D1 に置く=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0))

次に、セル D2 に入れます=IF(D1<>INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

これは、重複Gradesが存在する場合にも機能します

ただし、次のように使用することを強くお勧めしSortます。

前 後

*****また: ***** 上記の数式についての説明です。

探している数値 (列 C の数値) を含む行を取得するには、Match()関数を使用する必要があります。に入力=MATCH(C1,B1:B5,0)D1ます :

マッチ

これが何をしているのか: IS は の値を探しています。C1これ31 は を探していますRange("B1:B5")。0 は完全一致です。

一致するものを探すと、C1or31が 5 になります。これは、31 が入っていることを示しています。Row 5

Column A次に、 onの値を取得するために、関数を次のRow 5ように使用します。INDEX()

に追加=MATCH(C1,B1:B5,0)D1ます=INDEX(A1:A5,MATCH(C1,B1:B5,0))

索引

これは( = 5 のため) を検索し、結果は次のようになりRange("A1:A5")ます。Row 5=MATCH(C1,B1:B5,0)Grey

この式を下にドラッグすると、最初の問題が見つかります。

問題

ここに私たちの2つの問題があります:

1)  We get an `N/A` error in the last row. 
2)  Although `Green` is only in `Range("A1:A5")` one time we see it twice
    even though it would seem that `White` should be twice.

これらの原因は次のとおりです。

1) We need to add `$` to the range that will remain the same so when we drag down
   the formula is won't shift the range. As is the formula in `D5` is
   `=INDEX(A5:A9,MATCH(C5,B5:B9,0))` and we receive the error *because*
   `Range("A5:A9")` does not contain `15`, but the issue is we meant
    to look in `Range("A1:A5")` 

したがって、式を次のように変更します。式で onを=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0)) 使用しないことに注意してください。$C1

1つ修正

しかし、存在してはならない double 値の問題がまだあります。

は最初のセルであるためD1、数式は変更しません。最大値に等しいものは単純に関連付けられているため、関連付けの順序が重要になる理由はわかりません。

代わりに、開始しD2て入力します=IF(D1<>INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

=INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)) これが行っていることは、 の値が上の行の値と等しくないかどうかをチェックすることです。(ソートされたリストであることは、すべての double 値が互いの上にあることを意味します)同じでない場合は値を使用しますが、同じ場合はもう少し作業を行う必要があります。

値が同じでない場合は、式を使用しますINDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

それを説明するために、double 値の例を使用します。で、D3次の式を見つけます。=IF(D2<>INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)+MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)))

INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0))上記のセル ( ) と等しいことがわかっているので、true の場合の動作について説明したので、次の値にWhite注目します。if falseINDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)+MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0))

この場合、MATCH(C3,$B$1:$B$5,0)は の最初のインスタンスを含む行であり、行は であるため、行 Under で 23を探す必要があります。したがって、 orに最初に一致する行にa を追加するため、which is equal toを使用します。C323Row 1Row 1MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)MATCH("23", B2:B4,0)123C3

の値が返さ2れます。値23は の 2 行目にありRange("A2:A5")Red次のようにその範囲内と範囲内にありRow 1ますBlueRow 3

行 2

しかし、それが関連していて、それが入っRow 2ていることを知りたくないので、最後に値を見つけた行(または) を、現在見つけた行 ( )に追加して、を取得します。23GreenGreenRow 3231MATCH(C3,$B$1:$B$5,0)2Row 3

于 2013-04-23T17:06:15.093 に答える
0

これは、このリンクで概説されている方法論に基づく数式アプローチです。このアプローチの最終的なレイアウトを以下に示します。

スプレッドシートのレイアウト

1 つのヘッダー行があり、2 つのヘルパー列 (D & E) を使用すると仮定しました。ヘッダーに行を追加することはできますが、列 E の数式が正しく機能するためには、テーブルを列 A から開始する必要があります。

ヘルパー列は、数式を列 F の数式に統合することで削除できますが、お勧めしません。結果の数式を維持するのは面倒です。

必要な数式

  Cell C2: =LARGE(B:B,ROW(A2)-ROW($A$1))  [Copy down to bottom of data]

  Cell D2: =MATCH(C2,B:B,0)               [Copy down to bottom of data]

  Cell E2: =D2

  Cell E3: =IF(D3<>D2,D3,E2+MATCH(C3,INDIRECT("B"&(E2+1)&":B"&COUNTA(A:A)),0))
           [Copy down to bottom of data]

  Cell F2: =OFFSET($A$2,E2-ROW($A$2),0)   [Copy down to bottom of data]

回答の説明

答えを得るには、次の 4 つのステップがあります。

  • 成績を最高から最低に並べ替えます (例のデータで示したように)

  • 並べ替えられた成績の行番号の部分的な順序を作成します

  • 重複する成績の行番号を取得する

  • その順序を使用して、並べ替えられた各成績の名前を表示します

成績を最高から最低に並べ替える

成績をソートする機能

あなたが行ったように、私の並べ替えはLARGE、範囲または配列で n 番目に大きい値を返す関数を使用します。示されているように、LARGEcell の関数はC2列 B の成績を取得します。 の "n"LARGEは、現在の行番号からヘッダーの行数 (この場合は cell の 1 行) を引いて計算されA1ます。数式を下にコピーすると、「n」は 1 から 2 へ、3 へと進みます。

成績の行番号を部分的に並べ替える

重複を含む、並べ替えられた名前の成績行番号を取得する数式

次のステップは、並べ替えられた成績に対応する並べ替えられていない成績の行番号を決定することです。

これを行うには、MATCH関数を使用して、並べ替えられた各成績が列 B の並べ替えられていない成績のリストのどこにあるかを見つけます。MATCHは 3 つの引数を取ります。照合する値、照合する範囲、およびオプションで、一致のタイプ。完全一致の場合は 0 または FALSE の値で、ルックアップ範囲内で一致が見つかった場所を表すインデックス番号を返します (一致範囲の最初の行は 1、2 番目の行は 2)。など)。

D2上記のセルの数式でMATCHは、31 は列 B の 6 行目にあるため、グレード 31 の関数は 6 を返します。

cell の結果はD4、この式で部分的な順序しか取得できない理由を示しています。グレード 23 の 2 番目のインスタンスの行を検索しようとしているときに、式は値 2 を返します。これは、23 の最初のインスタンスの行に対応しますMATCH。 、これは行 2 にあります!

重複した成績の正しい行番号を取得する

重複した成績の正しい行番号を取得する数式

次の手順は、列 D の重複する行番号の正しい行参照を取得することです。これを行う数式は、テーブルの列 E の最初の 3 つのセルに対して示されています。

列 E で対処する必要がある 3 つのケースがあります。

  1. 最高グレードの最初の (そしておそらく唯一の) インスタンスについては、 cell で計算された行番号をそのまま使用することができますD2

  2. 2 番目のケースは、残りのグレードの行参照の最初のインスタンスを扱います。これらの場合、列 D で計算された行数を再度使用できます (列 E の式のステートメントのTRUE分岐を介して)。IFたとえば、E223 年生の最初のインスタンスに対応するセルでは、セルの行番号をD3使用できます。

  3. 最後のケースは、成績が重複している行です。ここで、MATCH列 B の for each duplicate は、そのグレードの以前の一致を除外するスライド範囲を使用して再計算されます。たとえば、列 C の 23 という重複した成績の場合、列 D の計算B3:B6で使用される範囲ではなく、範囲 で一致します。B2:B6

名前を並べ替えて表示する

学年ごとに並べ替えられた名前を表示する数式

この最後のステップは簡単です。並べ替えられたグレードに対応する名前を取得します。ここでは OFFSET 関数が使用されています。その引数は、セル参照と、その参照から目的の値が検出される行と列の数です。

于 2013-04-24T04:37:09.053 に答える