「1月」「2月」…と月別にシートを分けた売上管理ブック。年間合計を出そうとして、=1月!C5+2月!C5+3月!C5+…と12シート分を手で足していないでしょうか。この作業、INDIRECT関数を使えば数式1本で全シートを串刺し集計できます。そして実は、その先にもっと大事な設計論があります。
この記事では、INDIRECT関数による月次シートの串刺し集計の実装と、3D集計(シリアル参照)との使い分け、そして「そもそもシートを月別に分けるべきか」という設計の話までを解説します。
基礎知識:INDIRECT関数とは
INDIRECTは「文字列をセル参照に変換する」関数です。=INDIRECT("1月!C5")は=1月!C5と同じ結果を返します。ポイントは参照先を文字列で組み立てられること。つまりセルに入っている「1月」という文字からシート名を動的に作れるのです。
=INDIRECT(A2&"!C5") ※A2に「1月」と入っていれば1月シートのC5を参照
実装手順:12か月シートを1枚のサマリーに
ステップ1:シート名を規則化する
串刺しの前提はシート名とレイアウトの統一です。シート名は「1月」〜「12月」(または「202604」〜「202703」)に統一し、各シートの同じセル番地に同じ項目が来るようにします。1シートでもレイアウトがズレていると集計が狂います。
ステップ2:サマリーシートに月別参照表を作る
A列に1月〜12月のシート名を並べ、B列以降で各シートの値を引きます。
売上 =INDIRECT($A2&"!C5")
経費 =INDIRECT($A2&"!C10")
年間合計 =SUM(B2:B13)
行をコピーするだけで12か月分の一覧表が完成し、新しい月のシートを追加しても数式の修正は不要になります。項目が多い場合は、セル番地もヘッダー行に持たせて=INDIRECT($A2&"!"&B$1)とすれば、表全体が1本の数式で埋まります。
ステップ3:3D集計(串刺しSUM)との使い分け
=SUM('1月:12月'!C5) ※1月〜12月の全シートのC5を一発合計
合計値だけほしいなら、実はこの3D参照の方が簡単で高速です。使い分けの目安は、「月別の内訳一覧がほしい→INDIRECT」「年間合計だけほしい→3D参照」。3D参照はシートの並び順に依存する(間に挟まったシートも合算される)ため、集計対象外のメモシートは範囲の外に置きます。
設計論:そもそもシートを分けるべきか
ここまで解説しておいて言いにくいのですが、新しく作るブックなら「月別シート」より「1枚のデータベース形式」を推奨します。日付列を持つ1枚の明細表にデータを貯め、月別・科目別の集計はSUMIFSやピボットテーブルで行う設計です(関連記事:No.40 SUMIFSによる集計自動化/No.38 ピボットテーブルの経理活用)。
- 月をまたぐ分析(移動平均・前年同月比)が一瞬でできる
- レイアウト変更が1か所で済む(12シート直しは必ず漏れる)
- INDIRECTは再計算が重く、大きなブックでは動作が遅くなる(揮発性関数)
INDIRECTの串刺しは、既に月別シートで運用されているブックを壊さず集計を自動化する技術と位置づけるのが実務的です。当ブログの月次損益テンプレート(関連記事:No.17 月次損益管理)がデータベース形式を採用しているのも、この理由からです。
実務の注意点・つまずきポイント
- シート名の空白・記号に注意:シート名に空白等が入る場合は
=INDIRECT("'"&A2&"'!C5")とシングルクォートで囲みます。#REF!エラーの最頻出原因です - INDIRECTは他ブック参照に弱い:参照先のブックを閉じていると#REF!になります。同一ブック内での使用が原則です
- 揮発性関数のパフォーマンス:INDIRECTはブックのどこかが変わるたびに再計算されます。数千個単位で使うと目に見えて遅くなるため、大量ならPower Query(関連記事:No.98 Power Queryによる経理自動化)への移行を検討します
- 行の挿入・削除に追従しない:INDIRECTの参照は文字列固定のため、参照先シートで行を挿入してもズレたまま参照し続けます。レイアウト凍結とセットで使います
- 引き継ぎを考えてコメントを残す:INDIRECTの数式は初見の人に読みにくいため、仕組みの説明をシート内に書いておきます(関連記事:No.145 LET関数で読みやすい数式)
月次集計テンプレートのご案内
既存の月別シートを生かしたい方向けの「INDIRECT串刺し集計サマリー」と、これから作る方向けのデータベース形式「月次損益管理テンプレート」の両方を用意しています。現在の運用に合わせてお選びください。
まとめ
- INDIRECTは文字列から参照を作る関数。シート名の規則化とレイアウト統一が前提
- 内訳一覧はINDIRECT、合計だけなら3D参照(’1月:12月’!C5)と使い分ける
- シート名に空白があればシングルクォートで囲む。#REF!の最頻出原因
- 揮発性関数のため大量使用は重い。大規模ならPower Queryへ
- 新規ブックは月別シートよりデータベース形式+SUMIFS/ピボットが原則

コメント