web-dev-qa-db-ja.com

Excelでの範囲マッピング

Excelに数値[0..100]のデータの列があります。これらを次のような新しい値のセットにマップする新しい列が必要です。

  • > 90:4
  • 80-90:3
  • 70-79:2
  • 60-69:1
  • <60:0

[〜#〜] vlookup [〜#〜] を使用して、特に_77_のテスト入力と関数呼び出しVLOOKUP(77, A10:B19, 2, TRUE)を使用してこれを実行しようとしました。ここで、A10この範囲の左上の要素は次のとおりです。

 60 1 
 59 0 
 0 0 

ただし、_#N/A_の結果が得られます。ドキュメントによると、これは

... lookup_valueの値は、table_arrayの最初の列の最小値よりも小さいです...

ただし、77を渡しているため、明らかにそうではありません。ただし、ルックアップテーブルに明示的に含まれている値である_79_のテスト入力を使用すると、正しい結果が得られます。

VLOOKUPはここで間違ったアプローチですか?この種のマッピングを行うための最良の方法は何ですか?

入力値とルックアップテーブルの両方が数値として入力されていることに注意してください。

2
Justin R.

これを長い間掘り下げた後、ルックアップテーブルを昇順で並べ替える必要があることを学びました。ドキュメントには、ソートする必要があると記載されていますが、ソート順は指定されていません。昇順以外の結果は#N/Aエラー。

1
Justin R.

Vlookupの代わりにIndex/Matchを使用すると、質問に投稿されているように、ルックアップテーブルを降順で並べ替えることができます。式は

=INDEX(B1:B10,MATCH(77,A1:A10,-1))

3番目のパラメーターは、テーブルが降順でソートされたときにルックアップ値以上の値を返すため、-1と一致します。

1
teylyn