「4月」「5月」「6月」のように月ごとにシートを分けて管理しているとき、集計シート側で参照するシート名をセルの入力だけで切り替えたい場合、結論から言うとINDIRECT関数を使えば、文字列として組み立てた参照先を実際のセル参照に変換できるため、数式を書き換えずにシート名を切り替えられます。この記事では基本の書き方、通常のシート参照との違い、シートが存在しない場合の挙動まで解説します。
INDIRECT関数でシート名を可変にする基本の書き方
基本の形は次の通りです。
=INDIRECT(参照文字列,[参照形式])
「参照文字列」で指定した文字列を、実際のセル参照として解釈し直す関数です。参照文字列はテキストとして組み立てられるため、セルの値を使って「どこを参照するか」を動的に変更できます。参照形式を省略するかTRUEにするとA1形式、FALSEにするとR1C1形式で解釈されます。
なぜ直接参照ではなくINDIRECTなのか
通常の数式で別シートを参照する場合、=’4月’!B2のようにシート名を数式内に直接書き込みます。この書き方だと、参照するシートを変えたいときは数式そのものを編集する必要があります。INDIRECTを使えば、シート名を「文字列」としてセルに入力しておき、その文字列から参照を組み立てられるため、セルの値を変えるだけで参照先のシートを切り替えられます。
具体例:セルに入力した月名でシートを切り替えて集計する
「4月」「5月」「6月」という名前のシートがそれぞれ存在し、各シートのB2セルに月次売上の合計が入っているとします。集計シートに次のような表(A1:B4)を作ります。A列が参照したい月、B列が取得結果です。
| A(月) | B(取得結果) | |
|---|---|---|
| 2 | 4月 | 120000 |
| 3 | 5月 | 98000 |
| 4 | 6月 | 135000 |
A列(月)に入力したシート名をもとに、そのシートのB2セルの値を取得したい場合、A列(月)のこの表に対して、次のように書きます。
=INDIRECT(A2&"!B2")
A2セルの文字列(「4月」)と「!B2」という文字列をつなげて「4月!B2」という参照文字列を組み立て、それを実際のセル参照として解釈する、という意味の数式です。
A2が「4月」であれば「4月」シートのB2セル(120,000円)を、A3が「5月」であれば「5月」シートのB2セル(98,000円)を、それぞれ自動的に取得します。A列の文字を書き換えるだけで、数式自体を編集せずに参照先を切り替えられます。
シート名にスペースや数字が含まれる場合
シート名が数字から始まる、またはスペースを含む場合、通常のシート参照では’4月 売上’!B2のようにシート名をシングルクォートで囲む必要があります。INDIRECTで組み立てる場合も同様に、文字列側でシングルクォートを含めて組み立てる必要があります。
よくあるエラー・注意点
- 参照先のシートが存在しないと#REF!エラーになる: A列に入力したシート名のシートが実際には存在しない(入力ミス・シート名変更など)場合、#REF!エラーになります。シート名の表記ゆれ(全角・半角スペースなど)にも注意が必要です。
- 再計算のたびに評価される「揮発性関数」である: INDIRECTはブック内のどこかが変更されるたびに毎回再計算される揮発性関数のため、大量に使うとブック全体の動作が重くなることがあります。多用する場合は必要な範囲にとどめましょう。
- 他ブック(別ファイル)の参照には対応しにくい: INDIRECTで別ブックを参照する場合、参照先のブックを開いていないと#REF!エラーになります。同一ブック内での利用が基本です。
まとめ
INDIRECT関数はセルに入力した文字列から参照を組み立てられるため、シート名を切り替えるたびに数式を書き換える手間をなくせます。数式そのものを読みやすく整理したい場合はLET関数で数式を読みやすく整理する方法、複数条件で日付範囲を集計したい場合はSUMIFで日付範囲を指定して集計する方法もあわせてご覧ください。






