今回は、 VLOOKUP 関数の第二引数(検索範囲)を 名前定義 で名前をつけた複数のテーブルを INDIRECT 関数で切り替えて使うというものです。
どういうことかというと、例えば、商品の単価が欲しいとき、単価の表から VLOOKUP 関数で商品テーブルを検索して単価を探し出す、という場面を思い浮かべて下さい。
今日は「セールだから割引単価で販売するよ」、となったときは、参照式を修正して、割引単価表を検索するように変更すればできます。
そして、「この商品と、この商品だけは割引単価を適用して、他は通常単価で販売するよ」、となったときは、単価表の該当の商品の単価を修正して、対応できます。
でも、これらの2つの方法では、参照式や単価テーブルを修正することになるため、手間がかかるし、何より間違いが発生してしまします。
今回の方法は、こういう時に対応できる方法です。
名前定義 と INDIRECT 関数を使うと出来ることの幅がグーンと広がりますので、是非今回も最後まで読んでくださいね。
IF 関数による 検索範囲の切り替え
まずは、IF 関数を使って検索範囲を切り替える方法です。(それは、知っているから飛ばす)
通常ではVLOOKUPの範囲は固定です。セルコピーで範囲が変わらないように絶対参照にするのが定石。記述が長くなるので名前定義してしまって見やすい式に直します。
次に、何かの条件によって範囲を切り替えたい時は、どうしたら良いでしょうか。
単純に考えると、IF関数を使って条件分岐し、あるセルの値が”A”の時は一つ目のVLOOKUP、そのほかの時は二つ目のVLOOKUPが実行されるように、2つのVLOOKUP書けば実現可能です。
でもこの方法、条件が3つになるとIFとVLOOKUPが1つずつ増え、4つになるとさらに1つずつとどんどん増えていって、お化けのような式になってしまいます。
二つだけでもすでに分かりにくいですね。
INDIRECT 関数でテーブルを切り替える
次の方法は、 INDIRECT 関数でテーブルを切り替える方法です。
この方法だと、IF関数での分岐はいりません。VLOOKUPも一つ書けばいいのです。検索範囲のところに『定義された名前』をINDIRECTで直接参照するように記述して実現します。
(INDIRECT 関数についての関連記事)
INDIRECT 名前定義のまとめ
名前定義したテーブルを INDIRECT 関数で切り替えるやり方を説明しました。
この名前定義とINDIRECT関数の組み合わせは、セル範囲を扱うほかの関数(例えば MATCH 関数など)でも同様に使えます。工夫次第で切り替えて使うことが可能になるのです。ほかの工夫については、別途ご紹介していきたいと思います。
そのほか、INDIRECT関数を扱った記事を以下にリンクを張っておきますので、併せて参照してみてください。
コメント