このページではJavaScriptを使用しています。スクリプトが無効に設定されているとメニュー等が表示されません。
文字列を「式」に見立てて参照を行なう
セルやセル範囲の参照先を、対応する「親」セルの値によって動的に書き換えることができます。
このサンプルのような場合では、通常、
VLOOKUP
関数
で参照するものですが、同じ行を参照するアイテムが多い場合は行番号を別途算出してしまい、各参照名の項目はその行番号でダイレクトに名称を引き出します。
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
関数で行なうことができます。
このサンプルのような目的では、実際には計算式の解釈を行なう
INDIRECT
関数より、配列の指定位置を取り出すだけの
INDEX
関数の方が高速に動作します。