EXCEL

名前定義 と INDIRECT でVLOOKUP の検索範囲を切り替える

今回は、 VLOOKUP 関数の第二引数(検索範囲)を 名前定義 で名前をつけた複数のテーブルを INDIRECT 関数で切り替えて使うというものです。

どういうことかというと、例えば、商品の単価が欲しいとき、単価の表から VLOOKUP 関数で商品テーブルを検索して単価を探し出す、という場面を思い浮かべて下さい。

今日は「セールだから割引単価で販売するよ」、となったときは、参照式を修正して、割引単価表を検索するように変更すればできます。

そして、「この商品と、この商品だけは割引単価を適用して、他は通常単価で販売するよ」、となったときは、単価表の該当の商品の単価を修正して、対応できます。

でも、これらの2つの方法では、参照式や単価テーブルを修正することになるため、手間がかかるし、何より間違いが発生してしまします。

今回の方法は、こういう時に対応できる方法です。

名前定義 と INDIRECT 関数を使うと出来ることの幅がグーンと広がりますので、是非今回も最後まで読んでくださいね。

IF 関数による 検索範囲の切り替え

まずは、IF 関数を使って検索範囲を切り替える方法です。(それは、知っているから飛ばす

通常ではVLOOKUPの範囲は固定です。セルコピーで範囲が変わらないように絶対参照にするのが定石。記述が長くなるので名前定義してしまって見やすい式に直します。

次に、何かの条件によって範囲を切り替えたい時は、どうしたら良いでしょうか。

単純に考えると、IF関数を使って条件分岐し、あるセルの値が”A”の時は一つ目のVLOOKUP、そのほかの時は二つ目のVLOOKUPが実行されるように、2つのVLOOKUP書けば実現可能です。

B3の値で条件分岐し、通常価格なら通常単価表(紫)を検索し、そうでなければ割引単価表(緑)を検索する

でもこの方法、条件が3つになるとIFとVLOOKUPが1つずつ増え、4つになるとさらに1つずつとどんどん増えていって、お化けのような式になってしまいます。

二つだけでもすでに分かりにくいですね。

INDIRECT 関数でテーブルを切り替える

次の方法は、 INDIRECT 関数でテーブルを切り替える方法です。

この方法だと、IF関数での分岐はいりません。VLOOKUPも一つ書けばいいのです。検索範囲のところに『定義された名前』をINDIRECTで直接参照するように記述して実現します。

(INDIRECT 関数についての関連記事

INDIRECT
B3セルの値をINDIRECT関数で参照に変換し、通常単価表(G4:H8)を参照します。
”通常単価表”はG4:H8に定義されている
D4では、参照先はB4です。すると、割引単価表を参照して鉛筆は135になります

INDIRECT 名前定義のまとめ

名前定義したテーブルを INDIRECT 関数で切り替えるやり方を説明しました。

この名前定義とINDIRECT関数の組み合わせは、セル範囲を扱うほかの関数(例えば MATCH 関数など)でも同様に使えます。工夫次第で切り替えて使うことが可能になるのです。ほかの工夫については、別途ご紹介していきたいと思います。

そのほか、INDIRECT関数を扱った記事を以下にリンクを張っておきますので、併せて参照してみてください。

コメント

タイトルとURLをコピーしました