関数 EXCEL&VBA

VLOOKUPで検索値の左側の値を表示したいときに役立つ方法

VLOOKUP関数を使おうとしたら、検索値となる列が参照する表の一番左側にない場合はどうしたら良いでしょうか?

表を編集して一番左の列に検索値を移動 (あるいはコピー) できるならば問題ないでしょう。

表の編集ができない(したくない)ときは、VLOOKUP以外の方法で対応しましょう。



VLOOKUP関数は捨てる

トップ画像のケースでは、セルE2に入力された「型番」をB列から検索して、それに相当する「商品名」をセルF2に返します。

問題は検索値となる「型番の列が表の左端にない」ということ。
VLOOKUP関数を使うには 検索値は表(=参照範囲)の一番左の列にないと機能しません

冒頭で述べたように、表の左端に検索値の列を挿入したりコピーしたりすることができるのならば VLOOKUP関数を使うことは可能です。
しかし、それによって表の見た目を損なったり、そもそも表の加工が許可されていない場合もあるでしょう。

そんなときは、きっぱりと VLOOKUPには別れを告げて別な手法でアプローチします。
※以下、初心者向けにじっくり説明します。

OFFSET関数とMATCH関数を組み合わせる

「検索値」が表の一番左の列になくても検索する方法はあります。
OFFSET関数とMATCH関数の組み合わせです。

OFFSET関数

OFFSET関数とは、指定したセルから任意の行数、列数への参照を返す関数で;

=OFFSET (基準のセル, 行数, 列数, [高さ], [幅])

のように表されます。

要は「基準の行」から「行を指定した数だけ下方向に移動」し、さらに「列を指定した数だけ右方向に移動」したセルの値を返してくれるってことです。

今回のケースは「基準のセル」をセルA1(=商品名の列の先頭)にして、検索にマッチした「型番」の行まで下に降りれば正しい「商品名」にたどり着けます。
※列の横移動は必要ない(=0)

現時点でセルF2に入る数式は;

=OFFSET ( $A$1, ???, 0 )

となりますが、問題は セルA1から 何行下に移動すればよいのか がわからない。

それには、セルE2に入力された「型番」に マッチする行 を見つけなければいけません。

MATCH関数

MATCH関数とは文字どおり、検索値にマッチする値が入っているセルの相対位置(=何番目か)を返す関数です。書式は;

=MATCH ( 検査値, 検査範囲, [照合の種類] )

・検査値 = 検索値
・検査範囲 = 検索範囲

検索値は型番が入力された セルE2です。
検索範囲は セルB2~B6です。

これを MATCH関数の数式に当てはめると;

=MATCH ( $E$2, B2:B6, 0 )

「照合の種類」は;

1=~以下
0=完全一致
-1=~以上

となります。省略することもできますが、念のため「完全一致」としておきます。
これで、セルE2に入力された型番がセルB2~B6の中の何番目か、を求めることが可能です。

OFFSET関数とMATCH関数を合体!

この MATCH関数を前述の OFFSET関数の「???」の部分に当てはめると;

=OFFSET ( $A$1, MATCH ( $E$2, B2:B6, 0 ), 0)

となります。
実際のエクセル上でのイメージは以下のようになります。

数式の解説
① MATCH関数によってセルE2に入力された型番「LT-0810」は検索範囲(セルB2~B6)の中では「2番目」であることがわかる
② OFFSET関数の基準セル A1から MATCH関数で求めた 2つ下 に移動する
③ 型番LT-0810 に相当する商品名「暗号化USBメモリ Dr T」にたどり着ける

『検索値が一番左の列になくても検索する方法』は以上です。
他の関連記事と合わせて仕事や趣味に役立ててください。

関連記事・広告

 



併せて読んでおくとさらに便利

印刷範囲を「可変型」にしてデータ入力行だけを範囲設定する方法
印刷・名前の管理
エクセルの印刷範囲を「可変型」に設定して印刷範囲の拡大・縮小を自動化する方法です。データが入力されている行数分だけを印刷範囲に設定する方法をご存知ですか?

エクセル グラフのデータ範囲を自動で変更する|OFFSET関数
エクセルグラフ
エクセルのグラフ範囲を自動で変更する方法です。データ範囲を可変タイプにすればメンテナンスは楽チン。OFFSET関数を使った便利技を解説します。




-関数, EXCEL&VBA
-, ,