今回は、INDIRECT関数を紹介します。この関数は、セルの文字列を参照することで、別のシートを参照するときに大変便利な関数です。複数シートの情報を1シートにまとめるような業務で大活躍します。
INDIRECT関数が活躍するシーン
INDIRECT関数が活躍するのは、以下のようなバナナ・イチゴ・チョコレートの販売実績を集計するようなケースを想定してください。
こういったシートが、販売エリアの東京・大阪・愛知・神奈川・福岡の5シート存在するとして、それを“集計”シートで纏めます。集計シートは以下のようになっており、ほかのシートを参照したいです。
VLOOKUP関数を使うとどうなるか
例えば”東京”のシートからバナナの売価を引用したいとき、おそらく真っ先に思い浮かぶのは以下のようにVLOOLUP関数を使う方法です。以下のような式を投入することで、東京のバナナの売価である”100″を引用することができます。
- =VLOOKUP(集計!$B3,東京!$B$3:$F$6,2,0)
VLOOKUP関数については過去に紹介していますので、ご存じない方はご参照ください。
さて、東京のシートだけだったらこの方法で問題ありませんが、今回の例はシートが5枚あります。大阪・名古屋・神奈川・福岡のシートに対するVLOOKUP関数を投入しなおす必要があります。
5シートならまだ良いですが、実務ではもっと多くのシートを扱うこともあり、毎回VLOOKUP関数を投入しなおすのは非常に骨が折れます。
そこで使えるのが、次に紹介するINDIRECT関数です。
INDIRECT関数を組み合わせて効率化
INDIRCET関数とは
INDIRECT関数は、指定された文字列への参照を返す関数です。使い方は以下の通りです。
- =INDIRECT関数(参照文字列,参照形式(省略可))
参照形式については興味がない人が多いと思うので、省略を前提にしてしまって、参照文字列のみを考えてみます。例えば上の集計表で、以下のようにINDIRECT(“B3”)と投入します。そうすると、“B3″という文字列を参照先と認識し、B3セルにある”バナナ”を引用してくることができます。
便利な使い方
しかし、これだけだと何に使えるのか全く分かりませんね。INDIRECT関数で最も効果が大きいのが、他のシートをシート名を使って参照するケースです。例えば今回でいえば、”東京”という名前のシートを参照したい。そんな時は、以下のようにできます。
- =VLOOKUP(集計!B3,INDIRECT(C2&”!$B$3:$F$6″),2,0)
ポイントは、INDIRECT(C2&”!$B$3:$F$6″)の部分です。C2には”東京”という、参照したいシートと同じ文字列が存在します。これと、”B3:F6″という参照先の参照したい範囲をくっつけます。こうすることで、INDIRECT関数の結果が、“東京!$B$3:$F$6“となります。INDIRECTを使わずにVLOOKUP関数を使った最初の式と、結果的に同じになるということですね。
- =VLOOKUP(集計!B3,東京!$B$3:$F$6,2,0)
INDIRECT関数が便利なのは、この数式を横にコピーしていけば、”C2″という参照先が自動的にD2=>E2=>F2=>G2と移動するので、VLOOKUP関数の参照位置を調整する必要がなくなることです。具体的には、以下のような式とします。
- =VLOOKUP(集計!$B3,INDIRECT(C2&”!$B$3:$F$6″),2,0)
“バナナ”とあるB3セルを複合参照し、あとはオートフィル機能を使うことで、以下のように各エリアのシートのデータを引用することができました。(E3セルがエラーになっているのは、私がシート名を”愛知”にしたのに、集計表で”名古屋”としてしまったからです。わかりやすい間違いなのでそのままにしています。)
複合参照については次回の記事で紹介します。
オートフィルについては過去に書いていますのでご参照ください。
コメント