エクセルの「INDIRECT」関数は、非常に強力で柔軟な関数であり、セルの参照を動的に変更する際に使用されます。この関数は、他のセルの値をもとにセル参照を作成することができ、特に複雑なスプレッドシートで活躍します。
INDIRECT関数の基本構文
scssINDIRECT(ref_text, [a1])
- ref_text: 参照するセルのアドレスを文字列として指定します。この引数は必須です。
- [a1]: 省略可能な引数で、参照スタイルを指定します。
TRUE
または省略すると A1 スタイル(デフォルト)になります。FALSE
にすると R1C1 スタイルの参照になります。
INDIRECT関数の働き
INDIRECT関数は、参照するセルのアドレスを動的に生成します。つまり、他のセルに書かれた文字列を使って、参照先を変更することができるため、データが変動するスプレッドシートにおいて非常に有用です。

例えば、セル A1 に「B1」という文字列が入力されている場合、INDIRECT(A1)
と書くことで、実際に「B1」のセルの内容を参照することができます。このように、セル参照を文字列として扱い、その文字列を基に別のセルを参照することができるわけです。
INDIRECT関数の実用例
- 複数のシートを参照する場合
複数のシートがある場合、シート名を変更することなく、INDIRECT関数を使って別のシートのデータを動的に参照できます。例えば、シート名が「売上データ」で、セル A1 に参照したいシート名が入力されているとします。次のように書くことで、指定したシートのデータを参照できます。
excel=INDIRECT("'" & A1 & "'!B2")
この式は、セル A1 に入力されたシート名の B2 セルを参照します。
- セル範囲を動的に変更
セル範囲を動的に変更したい場合にも、INDIRECT関数は便利です。例えば、セル A1 に「1」と入力されている場合、次のように書くことで、A1 セルに基づいた動的なセル範囲を参照できます。
excel=SUM(INDIRECT("B" & A1 & ":B10"))
この式は、セル A1 の値(例えば「1」)に基づいて、B1からB10の範囲を参照し、その合計を求めます。
- 列の範囲を動的に変更
列を動的に変更する場合も、INDIRECT関数を使用することができます。例えば、セル A1 に「C」が入力されている場合、次のようにして C 列のデータを参照することができます。
excel=SUM(INDIRECT(A1 & "1:" & A1 & "10"))
この式では、A1 のセルに「C」と入力されている場合、C1からC10の範囲の合計を求めます。
INDIRECT関数の注意点
-
セルの内容が変更された場合の影響
INDIRECT関数は、文字列を基にセル参照を作成しますが、その文字列が変更されると参照先も変更されます。このため、セルの内容が動的に変わるシナリオでは非常に役立ちますが、意図しない変更を防ぐために、入力ミスには十分注意が必要です。 -
計算が遅くなる可能性
多数のINDIRECT関数を使ったスプレッドシートでは、特に参照先が他のシートにまたがる場合、計算速度が遅くなることがあります。このため、大規模なスプレッドシートで使用する際は、計算の最適化が必要になる場合があります。 -
エラー処理の必要性
INDIRECT関数を使用する際、参照先のセルが存在しない場合や範囲外のセルを参照している場合、エラーが発生することがあります。このようなエラーを防ぐためには、IFERROR
関数を組み合わせてエラー処理を行うと良いでしょう。
excel=IFERROR(INDIRECT(A1), "参照エラー")
この式は、INDIRECT関数でエラーが発生した場合、「参照エラー」というメッセージを表示します。
結論
INDIRECT関数は、エクセルにおいて非常に有用なツールであり、動的なセル参照を実現するための強力な手段です。特に、複数のシートやセル範囲を動的に変更したい場合に役立ちます。ただし、正しい使用法を理解し、計算速度やエラー処理に留意することが重要です。INDIRECT関数を効果的に活用することで、スプレッドシートの操作性が格段に向上します。