文字列を「式」に見立てて参照を行なう

セルやセル範囲の参照先を、対応する「親」セルの値によって動的に書き換えることができます。
このサンプルのような場合では、通常、VLOOKUP関数で参照するものですが、同じ行を参照するアイテムが多い場合は行番号を別途算出してしまい、各参照名の項目はその行番号でダイレクトに名称を引き出します。
INDIRECT関数を使う。
INDIRECT関数サンプル
(画像をクリックすると、このサンプルがダウンロードできます)
INDIRECT関数は、普通は直接記述するセルの参照式を、「式を見立てた文字列」から式に仕立て上げて参照してくれる「便利物」です。文字列であることから、自由に変更が可能なので動的に参照先を変更してしまうということを実現します。
R1C1参照形式の場合は

 =INDIRECT("マスタ!$B$"&R3C2,TRUE)
となります。

このサンプルは、MATCH関数で使ったものです。「氏名」の上の行にある「3」は、MATCH関数の算出結果で、「社員№=201」は、「マスタシートの3行目」だと教えてくれているので、わざわざVLOOKUP関数で探し直さなくても直接「マスタ」の3行目のから取り出せば良いという場合に使います。
つまり、このサンプルの式は、実際には「=マスタ!$B$3」として機能しているのです。最後の「3」は「氏名」の上の行の「3」を参照して得ているので、MATCH関数の算出結果が変われば同時に変わるわけです。

さて、このINDIRECT関数のカッコ内カンマの後ろの「TRUE」ですが、これはこのページの最初の方で説明しているA1参照形式とR1C1参照形式」の区別の示しています。
文字列で表記している参照式が「A1参照形式」で記述されている場合は「TRUE」、参照式が「R1C1参照形式」で記述されている場合は「FALSE」を指定します。この指定は現在の画面上が「A1参照形式」と「R1C1参照形式」のどちらで表示されているには関係がなく、計算式を作成する側が都合によって選べます。列方向に対して増減が発生するような処理では、列方向の指示子がアルファベットなのは都合が悪く、実のところ、私も普段は「R1C1参照形式」をメインに使っています。

※同じ目的を配列中の指定位置の内容を取り出すINDEX関数で行なうことができます。
INDEX関数サンプル
このサンプルのような目的では、実際には計算式の解釈を行なうINDIRECT関数より、配列の指定位置を取り出すだけのINDEX関数の方が高速に動作します。