VLOOKUP 関数は、下記の構文のように数式を作成します。

=VLOOKUP(検索値 , 範囲 , 列番号 , [検索の型])

「[検索の型]」が TRUE の (または省略した) ときは近似値一致、FALSE なら完全一致、という説明が一般的であり、FALSE だと処理に時間がかかる、ということを (経験上) 知っている方は多くいらっしゃいます。
(正確には、“探索の仕組みが違う” から FALSE で時間がかかるのは当たり前なのだけれど、ここではそこを細かく説明はしません。)

完全に一致する値だけを使って VLOOKUP で検索したいけれど処理に時間がかかるのはいや、という場合の 1 つの方法をご紹介します。

イメージは下図です。
たとえば、下左図のセル A2 には「250」が格納されているとき、表の [数量] 列には「250」はないけれど、検索の型を TRUE とすると「D」が返ります。

これが求めている結果ではなく、たとえば右図のように完全に一致する値はなかった、というように処理したい、ということです。

値が存在するのかを確認して、IF 関数で処理する

  1. セル A2 が検索値、A5:B9 が範囲、返す列は 2 列目 ([ランク] 列)、検索の型を TRUE として数式を作成してみます。


  2. 「250」という値は A5:A9 には存在しないため、それを超えない近しい値である「200」を使って結果が返ります。


  3. 図のセル B2 のように、検索値 (A2 の値) が存在するのかをチェックするためのセルを用意して、VLOOKUP 関数の数式を作成します。

    「250」という値が、[数量] 列にあるのかどうかを調べたいので、3 つ目の引数は 1 列目 ([数量] 列) とするのがポイントです。


  4. 「250」という値は A5:A9 には存在しないため、それを超えない近しい値である「200」を使って結果が返ります。
     
     実際に探したい検索値 (セル A2) と、それを TRUE で探索した結果 (セル B2) が等しくないことがわかります。
     
     検索値とチェック用の値が等しくない=完全に一致する値はない、ということです。


  5. 最初に作成した結果を表示するための VLOOKUP 関数の数式を、IF 関数による分岐で制御するように編集します。

    セル A2 (検索値) とセル B2 (チェック用) が等しければ VLOOKUP 関数で処理をし、等しくなければ「完全一致なし」という文字列を返すように編集します。


  6. セル A2 とセル B2 が等しくない場合、すなわち完全に一致する値がない場合、「完全一致なし」という文字列が返ります。


  7. セル A2 とセル B2 が等しい場合、すなわち完全に一致する値がある場合、VLOOKUP 関数による処理が実行され、結果が返ります。

今回は完全に一致する値がない場合は「完全一致なし」という文字列を表示しましたが、これはあくまでも例です。 IF 関数の FALSE の場合の処理はもちろん工夫できますので、何も表示したくないのならそうすればよいです。 大切なのは、工夫次第で処理速度とやりたい処理 (完全一致) の両方をかなえることができる、ということですね。 

石田 かのこ