セル 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 は完全一致です。
一致するものを探すと、C1
or31
が 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

しかし、存在してはならない 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 false
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))
この場合、MATCH(C3,$B$1:$B$5,0)
は の最初のインスタンスを含む行であり、行は であるため、行 Under で 23を探す必要があります。したがって、 orに最初に一致する行にa を追加するため、which is equal toを使用します。C3
23
Row 1
Row 1
MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)
MATCH("23", B2:B4,0)
1
23
C3
の値が返さ2
れます。値23
は の 2 行目にありRange("A2:A5")
、Red
次のようにその範囲内と範囲内にありRow 1
ますBlue
。Row 3

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