Johnは、列Aに昇順の数値と列Bに対応するテキスト値のルックアップテーブルを持っています。VLOOKUP関数を使用すると、指定されたルックアップ値以下の数値のテキスト値が返されます。 Johnは、ルックアップ値以上の最初の値を本当に望んでいます。

VLOOKUPの動作を変更する方法はありません。ルックアップ値以下の値と常に一致します。ただし、オプションは、実際のルックアップを実行するために使用される式を変更することです。ルックアップに使用する値がセルD1にあると想定する次の数式について考えてみます。

=IF(VLOOKUP(D1,$A$1:$A$10,1)=D1,VLOOKUP(D1,$A$1:$B$10,2), INDEX($B$1:$B$10,1+MATCH(D1,$A$1:$A$10)))

D1の値が列Aの値と完全に一致する場合は、通常のVLOOKUP式が使用されます。そうでない場合、VLOOKUPは破棄され、MATCH関数と組み合わせたINDEX関数が優先されます。

データテーブルを降順で並べ替えることができる場合は、より短い式を使用できます:

=INDEX($A$1:$B$10,MATCH(D1,$A$1:$A$10,-1),2)

MATCH関数は、D1値を使用して、その値以上の最小値を探します。 (これは-1パラメーターが指定するものです。)MATCH関数は適切な行の行番号を返し、これはINDEXによって実際に値をフェッチするために使用されます。

この問題に対するもう1つの興味深いアプローチは、ルックアップ値の逆数を、データテーブルから実際に情報をルックアップするために使用されるコントロール列として使用することです。たとえば、データテーブルがA1:B10にあり、ルックアップに使用する実際の数値が列Aにあると仮定します。データテーブルの左側に列を挿入する必要があります。この新しい列の最初のセル(現在は列A)に、次の数式を挿入します:

=1/B1

これにより、B1の値の逆数が提供され、列Aのセルにコピーできます。データテーブルには、A1:C10の3つの列があります。

次に、この新しい列に基づいてデータテーブルを昇順で並べ替えます。

次に、ルックアップ式にわずかな変更を加えて、必要なものの逆をルックアップします。ルックアップに使用する値がセルE1にあるとすると、次の数式を使用します。

=VLOOKUP(1/E1,$A$1:$C$10,3)

最終的に効果的に得られるのは、E1の値以下の列Bの値に関連付けられた列Cの目的の値です。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3090)は、Microsoft Excel 97、2000、2002、および2003に適用されます。