wrote :: 2001.12.10

トップページ > Excel > 関数 > INDIRECT関数

書式 :INDIRECT(参照文字列 , 参照形式)
機能 :指定される文字列への参照を返します
解説 :参照するセル範囲を変更します。文章で書くとわかりにくいですが、実はすごく便利な関数です

たとえば任意のセルに「=A1」と入力します。すると、そのセルには「セルA1」に入力されているデータが表示されます。これが「セルの参照」です。基本中の基本ですね。今度はSUM関数を考えてみましょう。任意のセルに「=SUM(B1:B5)」と入力すると、そこにはセル範囲B1:B5を合計した値が表示されます。ここまでは、よろしいですか?

では、左のようなケースではどうでしょう。セル範囲 B1:B5 の合計をセルB7に表示したい場合です。単純に考えれば、セルB7に「=SUM(B1:B5)」と入力すればいいのですが、実はセルA1に文字列で「B1:B5」と入力されているんです。セルB7 に「=SUM(B1:B5)」と直接力するのではなく、SUM関数で合計するセル範囲のアドレスは、セルA1に書かれているデータを使いたいんです。
セルB7に「=SUM(A1)」と入力したら、SUM関数はセルA1を合計してしまいます。では、文字列を結合する&を使って「=SUM(&A1&)」ではどうでしょう。結果はエラーです。ではでは、「="=SUM("&A1&")"」ならどうでしょう。なるほど、セルB7に「=SUM(B1:B5)」と表示されましたが、これはそういう文字列を作ったにすぎません。

そりゃ、そうです。「=SUM(」は計算式なのに、「&A1&」と文字列を結合しているのですから。これではうまくいくはずがありません。こんなときに使うのが INDIRECT関数です。セルB7 に「=SUM(INDIRECT(A1))」と入力すると、セルA1で指定した「B1:B5」を計算することができるのです。よろしいですか?本来なら文字列として入力されているデータを、計算式の中で使える「セルのアドレス」に変換してくれるのが INDIRECT関数なのです。これなら、セルA1を「B1:B4」と書き換えるだけで、セルB7で合計するセル範囲を間接的に変更することができます。
この INDIRECT 関数は、たとえば次のようなケースで威力を発揮します。

■参照範囲を名前で切り替える

左は、入力された距離に応じた金額を表引きするサンプルです。調べたい距離はセルB3に入力します。参照する表はセル範囲A5:B10です。セルC3には

 =VLOOKUP(B3,A5:B10,2)

という関数が入力されています。ちなみに、距離が入力されているセル範囲A6:A10は、実際には「5」や「20」といった数値だけが入力されています。「○Km以上」というのは、セルの表示形式の「ユーザー定義書式」を使っています。

では、左のように、参照する表が2つあったらどうでしょう。VLOOKUP関数の引数「A5:B10」を「D5:E10」と書き換えれば参照する表を切り替えられますが、いちいち数式を書き換えるのでは実用的ではありません。
できれば…セルA3 の「区分」欄に"大人"と入力したら大人用の参照表から、"子供"と入力したら子供用の参照表から表引きできるようになったら便利ですね。それを簡単に実現できるのが INDIRECT 関数なのです。

まず、大人用の参照表(A5:B10)に「大人」という範囲名を付けます。セルに名前を付けるにはいろいろな方法がありますが、名前を付けたいセル範囲を選択した状態で、数式バーの左にある名前ボックスに付けたい範囲名を直接入力するのが簡単です。 ついでに、子供用の参照表(D5:E10)に「子供」という範囲名を付けておいてください。
こうして参照したい範囲に名前を付けると、セル C3 の式は、

 =VLOOKUP(B3,大人,2)

と書くことができます。

それでは、"大人"という文字列が入力されているセルA3を利用してVLOOKUP関数を作ってみましょう。しかし、左の図のように、単純に結合しただけでは計算されません。左図のセルC3は「ただの文字列」だからです。
ここで、伝家の宝刀INDIRECT関数の出番です。単なる文字列の"大人"を、セル範囲に付けた名前としての"大人"に変換してくれるのが INDIRECT 関数です。

INDIRECT関数を使うと左のようになります。現在、セルB3に入力した距離「12」に該当する金額「\360」が表示されています。その式には、VLOOKUP 関数が参照する表のアドレスは直接書かれていません。参照する表は、セルA3に"大人"または"子供"と入力することで切り替えられます。
なお、セルA3は毎回入力するよりリストなどから区分を選択した方が便利でしょう。ワークシートでリスト入力する方法は「ワークシート上でリスト入力」をご覧ください。

また、INDIRECT関数を使うと、セルの移動や削除に影響されず、いつも同じセルを参照することが可能です。詳しくは「セルを移動しても同じセルを参照する」をご覧ください。



[目次]に戻る