ポイント3:検索範囲の指定でINDIRECT関数を組み合わせる

そして、検索値を入力する欄(ここでは、「No」欄)を作成し、取り出したデータを表示したいセルにVLOOKUP関数を入力します。ここは、ひとまず、「一般」の表からデータを取り出す形で作成しておきます。

VLOOKUP関数を利用し、ひとまず、「一般」の表からデータを取り出す形で作成

VLOOKUP関数を利用し、ひとまず、「一般」の表からデータを取り出す形で作成


C15のセル:=IF(B15="","",VLOOKUP(B15,A3:E6,2,FALSE))
※VLOOKUP()の中は「検索値,検索範囲(一般),列番号(コース名),[検索方法](完全一致)」

D15のセル:=IF(B15="","",VLOOKUP(B15,A3:E6,4,FALSE))
※VLOOKUP()の中は「検索値,検索範囲(一般),列番号(料金),[検索方法](完全一致)」


さぁ。ここからが、今回の組み合わせ術のポイントです。

VLOOKUP関数で、取り出し元の表を切り替えるのに関係する引数は、第2引数の「検索範囲」。今、一般の表のセル範囲が入力されていますね。ここで、【ポイント1:セル範囲名を設定する】で設定したセル範囲名を使用すれば良いのですが、【ポイント2:設定したセル範囲名で表を指定する】で準備したセルを指定してもエラーが発生してしまいます。

C15のセル:=IF(B15="","",VLOOKUP(B15,A15,2,FALSE))
D15のセル:=IF(B15="","",VLOOKUP(B15,A15,4,FALSE))
ではエラー表示に……

セル[A15]を検索範囲に指定するとエラーが出てしまう

セル[A15]を検索範囲に指定するとエラーが出てしまう

これでは、設定した「文字列」そのものを指定しているだけで、関数で使用できる「セル範囲名」として認識されないのです。


ここで、文字列を関数で使用できるようにする「INDIRECT関数」を使用します! INDIRECT関数の引数に、【ポイント2】で準備したセルを指定し、このINDIRECT関数をVLOOKUP関数の第2引数「検索範囲」に指定します。

C15のセル:=IF(B15="","",VLOOKUP(B15,INDIRECT(A15),2,FALSE))
D15のセル:=IF(B15="","",VLOOKUP(B15,INDIRECT(A15),4,FALSE))

こうすることで、指定したセル範囲名を表す文字列が関数で使用できる形に変換されて、VLOOKUP関数がそのセル範囲を参照する、というしくみが出来上がります。

VLOOKUP関数を利用し、ひとまず、「一般」の表からデータを取り出す形で作成

セル[A15]が関数として利用できるようになり、エラーが出なくなった


INDIRECT関数については、ガイド記事「セルに入力されている文字を関数で使うには」でも詳しく紹介しています。ぜひ、こちらもご覧下さい。