• ベストアンサー

別の表を参照して値を取得する

Aの列にランダムで順に増えていく数字が 10個、あります。 Bの列には10から1までの数字があります。 Dの列にある数字を入れて その隣のEの列に、Aの列のどこの範囲に あたるかを調べて、Bの列の数字を 表示させる方法をお願いします。 _A _B _D _E 03 10 28 01 05 09 27 01 08 08 26 01 09 07 25 01 11 06 24 02 14 05 23 02 17 04 10 06 20 03 03 10 24 02 11 06 28 01 12 05

質問者が選んだベストアンサー

  • ベストアンサー
  • jokyoju
  • ベストアンサー率45% (10/22)
回答No.5

No4ですF1が定義されていませんでした。 さらに長くなりますが次の式なら大丈夫だとおもいます。 =VLOOKUP(LARGE($A$1:$A$10,IF(D1=VLOOKUP(D1,$A$1:$A$10,1),RANK(VLOOKUP(D1,$A$1:$A$10,1),$A$1:$A$10),RANK(VLOOKUP(D1,$A$1:$A$10,1),$A$1:$A$10)-1)),$A$1:$B$10,2)

fd45
質問者

お礼

完璧です! ありがとうございました。

その他の回答 (4)

  • jokyoju
  • ベストアンサー率45% (10/22)
回答No.4

=VLOOKUP(LARGE($A$1:$A$10,IF(D1=F1,RANK(F1,$A$1:$A$10),RANK(F1,$A$1:$A$10)-1)),$A$1:$B$10,2) とE1のセルにいれ下方向のコピーしてください 式は複雑になっていますが作業用セルなしに計算できます。

fd45
質問者

補足

#N/A になってしまいます。

回答No.3

横レスすみません。 vlookupの4番目の引数に"FALSE"もしくは"0"を追加してください。 その検索値に完全に合致する場合のみ値を返し、見つからない場合は#N/Aを返します。 4番目の引数を省略すると規定値の"TRUE"になり、検索値が見つからない場合、検索値未満の最も大きい値を返します。

noname#204879
noname#204879
回答No.2

  A  B  C  D 1  03 10 28 01 2  05 09 27 01 3  08 08 26 01 4  09 07 25 01 5  11 06 24 02 6  14 05 23 02 7  17 04 10 06 8  20 03 03 10 9  24 02 11 06 10 28 01 12 05 D1: =VLOOKUP(-C1,ref,2) ただし、事前に次の要領で「別の表」を作成しておく必要があります。 1.2列10行の任意の空き範囲の左上隅のセルに式 =-OFFSET($A$1,10-ROW(A1),0)   を入力(→ -28 と表示) 2.その右隣のセルに式 =OFFSET($A$1,10-ROW(B1),1) を入力(→ 01 と表示) 3.上の2つのセルを下方にズズーッと9行分複写 すると、下の表が作成されます。当該表の範囲に ref という名前を付けます。 -28 01 -24 02 -20 03 -17 04 -14 05 -11 06 -09 07 -08 08 -05 09 -03 10

noname#58440
noname#58440
回答No.1

  その例なら =VLOOKUP(C1,A1:B10,2) 但し、A列が昇順に並んでないとダメです。  

fd45
質問者

補足

数字ピッタリの所は正確に出ますが、 数字ピッタリでない所は1ずれてしまいます。 お願い致します。

関連するQ&A