毎月の月次報告資料を作成する際、各部署から送られてくるバラバラなExcelファイルを一つの集計シートにまとめる作業に、数時間を費やしている担当者は少なくありません。コピー&ペーストを繰り返すうちに参照先が一行ズレてしまい、結果として役員会議の直前に数字の誤りが見つかって青ざめる――。そんな光景を、私は経理部門の現場で何度も目にしてきました。こうした「手作業による参照の更新」という不毛な業務から、私たちを解放してくれる強力なツールがINDIRECT関数です。
- INDIRECT関数 使い方 とは?セルの参照を自由自在に操る魔法の杖
- 文字列を「住所」に変えることで得られる実務上のメリット
- 月次決算の集計時間を80%削減する別シート参照術
- 複数ブックをまたぐリンク切れの恐怖から解放される方法
- ドロップダウンリストと連動して動的なダッシュボードを構築する
- 名前定義と組み合わせることで数式の可読性を極限まで高める
- #REF!エラーが出たときに真っ先に確認すべき3つのチェックリスト
- VLOOKUPやOFFSET関数と組み合わせる実務特化型テクニック
- 大規模データで処理が重くなる「揮発性」の落とし穴と回避策
- Googleスプレッドシートとの互換性と実務上の注意点
- 現場のプロが教えるメンテナンス性を落としさないための運用ルール
- 明日からの実務に取り入れる3ステップ
INDIRECT関数 使い方 とは?セルの参照を自由自在に操る魔法の杖
Excelの数式において、通常「=A1」と入力すればA1セルの値を参照します。しかし、この「A1」という住所そのものを、他のセルの値や文字列の組み合わせで作り出したい場面があります。これがINDIRECT関数の真骨頂です。この関数を一言で表現するなら、「文字列を、Excelが理解できる有効なセル参照(住所)に変換する関数」と言えます。
文字列から「生きた参照」を生み出す仕組み
INDIRECT関数の基本構文は非常にシンプルです。「=INDIRECT(参照文字列, [参照形式])」という形をとります。第一引数の「参照文字列」には、”A1″のようなセル番地や、”営業部!B5″のようなシート名を含めた住所を指定します。
実務でよくあるのが、A1セルに「B10」という文字が入っているケースです。ここで普通に「=A1」と打てば、画面には「B10」という文字が表示されるだけです。しかし、「=INDIRECT(A1)」と入力すると、ExcelはA1の中身を読み取り、「あぁ、B10セルの値を持ってくればいいんだな」と解釈してくれます。
A1形式とR1C1形式の使い分け
第二引数の「参照形式」は、通常は省略して問題ありません。省略した場合は「A1形式(列を英字、行を数字で表す一般的な形式)」として処理されます。一方で、マクロ(VBA)に慣れている方や、特定の条件下で計算式を組みやすくするために「R1C1形式」を使いたい場合は、ここをFALSEに設定します。
筆者の経験では、実務の9割以上はA1形式で完結しますが、複雑なマクロとの連携を前提としたシート設計では、R1C1形式をあえて採用することもあります。初心者のうちは、まずは省略(TRUE扱い)で進めるのが、混乱を防ぐコツです。

文字列を「住所」に変えることで得られる実務上のメリット
なぜわざわざ直接セルを指定せずに、INDIRECT関数を経由させる必要があるのでしょうか。それは「数式を一度書いたら、二度と書き直さない」というシート設計を可能にするためです。
セルの移動や削除に強い数式を組む
通常のセル参照(例:=Sheet2!A1)は、Sheet2のA1セルが削除されたり、行が挿入されたりすると、Excelが気を利かせて参照先を「=Sheet2!A2」などに自動変更してしまいます。これが便利な時もありますが、集計のフォーマットを固定したい場合には厄介です。
INDIRECT関数で「=INDIRECT(“Sheet2!A1”)」と文字列で固定してしまえば、Sheet2側でどんなに行の削除が行われても、頑なに「左上のA1セル」を見続けてくれます。経理の現場では、この「参照を壊さない」という性質を利用して、テンプレートの堅牢性を高める手法がよく使われます。
動的なデータ抽出の基盤となる
特定のセルの値を変えるだけで、参照する範囲やシートを瞬時に切り替えられるようになります。これは、後述する「部署別集計」や「年度別データの比較」などで威力を発揮します。
実務でよく見かけるのは、VLOOKUP関数とINDIRECT関数を組み合わせる手法です。参照先のテーブル範囲をセルの値によって切り替えることで、一つの検索フォームで複数のデータソース(2024年度データ、2025年度データなど)を横断的に検索することが可能になります。
月次決算の集計時間を80%削減する別シート参照術
企業の経理部や営業管理部において、INDIRECT関数が最も輝く瞬間は、大量のシートから特定のデータを吸い上げる時です。例えば、営業部、総務部、製造部という名前のシートがそれぞれ存在し、各シートのB10セルに「経費合計」が計算されているとしましょう。
シート名をリスト化して一気に集計する
通常のやり方であれば、集計シートに「=営業部!B10」「=総務部!B10」と一つずつ数式を入力していきます。しかし、部署が100あったらどうでしょうか。気が遠くなる作業です。
ここでINDIRECT関数を使います。A列に部署名(シート名と一致するもの)を書き、B列に以下の数式を入力します。
`=INDIRECT(A2 & “!B10”)`
こうすることで、A2セルに入力された「営業部」という文字と、固定の住所「!B10」が結合され、Excelは「営業部シートのB10セルを見に行く」という動作を自動で行います。
実務シナリオ:支店別売上集計の自動化
私のクライアントで、全国50支店の売上を毎日手作業で集計していた会社がありました。各支店から送られてくるブックを一つのファイルにまとめ、各支店名をシート名にして管理していましたが、集計表への転記ミスが絶えませんでした。
この仕組みをINDIRECT関数による自動集計に切り替えたところ、新しい支店が増えても「支店名を集計リストに追加するだけ」で、数式を一行も修正することなく集計が完了するようになりました。研修で教えていると、このテクニックを伝えた瞬間に受講者の目の色が変わる、まさに「魔法」のような瞬間です。

複数ブックをまたぐリンク切れの恐怖から解放される方法
Excel実務における最大のトラブルの一つが「外部参照のリンク切れ」です。別のファイル(ブック)から数値を引っ張ってくる際、ファイル名が変わったり保存場所が変わったりすると、数式が「#REF!」に化けてしまいます。
外部ブック参照をINDIRECTで制御する
INDIRECT関数を使えば、外部ブックの参照も文字列で制御できます。
`=INDIRECT(“[2024年度売上.xlsx]営業部!B10”)`
このように記述すれば、ファイル名をセルに入力するだけで、参照先ファイルを動的に変更できます。
ただし、ここには初心者がつまずきやすい重要なポイントがあります。Microsoftの仕様上、INDIRECT関数で外部ブックを参照する場合、「参照先のファイルが同時に開いていなければならない」という制約があります。
参照先ブックを閉じたまま参照したい場合の対策
「ファイルを開くのが面倒」という声はよく聞きますが、残念ながらINDIRECT関数単体では解決できません。この場合は、Power Query(パワークエリ)を使用するか、マクロで一時的にファイルを開閉する処理を組むのがプロの定石です。
それでも、現在作業中の複数のファイルを連携させる場面では、INDIRECT関数は非常に有効です。例えば「当月データ」と「前月データ」の2つのブックを開き、集計表の「比較月」というセルを書き換えるだけで、参照先ブックを瞬時に切り替えるといった運用が可能です。
注意点: 外部ブックを参照する際は、ブック名やシート名にスペースが含まれている場合、シングルクォーテーション(’)で囲む必要があります。例:=INDIRECT(“‘[Sales Report.xlsx]Sheet1’!A1”)
ドロップダウンリストと連動して動的なダッシュボードを構築する
データの入力規則(ドロップダウンリスト)とINDIRECT関数の組み合わせは、Excelを高度なシステムのように変貌させます。特によく使われるのが「連動するプルダウン」です。
連動する2段階プルダウンの作り方
例えば、1つ目のリストで「都道府県」を選択すると、2つ目のリストにはその都道府県に属する「市区町村」だけが表示される仕組みです。
1. まず、各都道府県の名前でセル範囲を「名前定義」します(例:東京都という名前で「新宿区、渋谷区、港区」を定義)。
2. 1つ目のプルダウン(セルA2)で「東京都」を選択できるようにします。
3. 2つ目のプルダウン(セルB2)の「元の値」に、`=INDIRECT(A2)` と入力します。
これだけで、A2セルの「東京都」という文字列がINDIRECTによって有効な「名前定義の範囲」に変換され、B2のリストには東京都の区だけが並びます。
実務事例:備品管理システムのカテゴリー検索
総務部の備品管理でこの手法を導入した事例を紹介します。まず「事務用品」「PC周辺機器」「家具」という大カテゴリーをリスト化。大カテゴリーを選ぶと、事務用品なら「ボールペン、ノート、消しゴム」、PC周辺機器なら「マウス、キーボード、USBメモリ」が次のリストに出るようにしました。
この設定を忘れて集計がずれるケースをよく見かけますが、名前定義の名称とプルダウンの選択肢が1文字でも(全角半角の差など)異なるとエラーになります。実務では「名前の管理」機能を使って、定義された名前が正しいか定期的にチェックすることが重要です。

名前定義と組み合わせることで数式の可読性を極限まで高める
「A1:C100」という範囲指定よりも、「売上テーブル」という名前の方が、後から数式を見た時に意味が通じやすいのは言うまでもありません。INDIRECT関数と名前定義を組み合わせることで、メンテナンス性が劇的に向上します。
名前定義を「変数」として扱う
実務でよくあるのが、複数の部署が同じフォーマットの表を持っているケースです。各部署の表の範囲に「営業部データ」「経理部データ」と名前を付けておきます。
集計セルに部署名(営業部)を入力させ、数式を以下のように組みます。
`=SUM(INDIRECT(A2 & “データ”))`
こうすることで、A2セルの中身に応じて「SUM(営業部データ)」や「SUM(経理部データ)」へと数式が動的に変化します。
「名前の管理」を使いこなすプロの視点
筆者の経験では、大規模なワークブックになればなるほど、直接的なセル番地の指定は避けるべきです。なぜなら、シート構成の変更があった際に、全ての数式を追いかけるのが不可能になるからです。
INDIRECT関数の中で名前定義を使う際は、以下のMicrosoft公式サイトのガイダンスを参考に、名前の付け方のルール(スペースを含まない、数字から始めない等)を遵守することが鉄則です。
参照:[Microsoft サポート – Excel で名前を定義して数式で使用する](https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E5%90%8D%E5%89%8D%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%A6%E6%95%B0%E5%BC%8F%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-4d0f13ac-53b7-422e-afd2-abd7ff379c64)
ポイント: 名前定義を活用する際は、Ctrl + F3 キーを叩いて「名前の管理」ダイアログを出し、現在定義されている名前と範囲が一目でわかるようにしておくと、デバッグがスムーズになります。
#REF!エラーが出たときに真っ先に確認すべき3つのチェックリスト
INDIRECT関数を使い始めると、必ずと言っていいほど直面するのが「#REF!」エラーです。このエラーは「参照先が見つからない」ことを意味していますが、その原因は大きく分けて3つに集約されます。
1. シート名に記号やスペースが含まれていないか
これが初心者が最もつまずきやすいポイントです。シート名が「2024年度 予算」のようにスペースを含んでいたり、「(新)営業部」のように記号を含んでいたりする場合、INDIRECT関数内での記述は「’2024年度 予算’!A1」のようにシングルクォーテーションで囲う必要があります。
数式で書くとこうなります:
`=INDIRECT(“‘” & A1 & “‘!B10”)`
この複雑な引用符の組み合わせは、研修の受講生が最も苦労する部分の一つです。まずは「シート名には極力スペースや記号を使わない」というルールを社内で徹底する方が、長期的な効率化に繋がります。
2. 参照先のブックが閉じられていないか
前述の通り、INDIRECT関数で別ブックを参照している場合、そのブックが閉じた瞬間に数式は「#REF!」を返します。
「さっきまで計算できていたのに、急にエラーになった」という問い合わせの多くは、誰かが参照元ファイルを閉じたことが原因です。この挙動はINDIRECT関数の仕様ですので、運用の際は「必ずセットで開く」という手順書を作成しておく必要があります。
3. 文字列結合の「”」の位置が間違っていないか
`=INDIRECT(“Sheet1!A” & B1)` と書くべきところを、`=INDIRECT(“Sheet1!A & B1”)` と書いてしまうミスも非常に多いです。
「どこまでが固定の文字」で「どこからがセルの中身(変数)」なのかを明確に区別し、アンパサンド(&)で正しく繋げているかを確認してください。

VLOOKUPやOFFSET関数と組み合わせる実務特化型テクニック
INDIRECT関数は単体で使うよりも、他の検索・行列関数と組み合わせた時に真価を発揮します。ここでは、実務で即戦力となる組み合わせを紹介します。
VLOOKUPの「範囲」を自在に切り替える
商品の売上データが年度ごとに別のシート(Sheet2023, Sheet2024)に分かれている場合、以下のような数式が組めます。
`=VLOOKUP(A2, INDIRECT(“Sheet” & B2 & “!A1:D100”), 4, FALSE)`
B2セルに「2024」と入れれば、自動的に2024年度のシートからデータを検索してきます。これにより、一つの検索フォームで複数年分のデータを自由に閲覧できるようになります。
OFFSET関数との組み合わせで可変範囲を作る
OFFSET関数は「指定した位置から〇行、〇列移動した範囲」を返しますが、その「開始位置」をINDIRECTで指定することも可能です。
「この部署の最新月のデータを取得したい」という場合、部署名から開始セルを特定し、そこから数か月分のデータを取得するといった柔軟な動きが可能になります。
ただし、OFFSETもINDIRECTも「揮発性関数」と呼ばれる、計算負荷の高い関数です。組み合わせる際は、シートが重くならないよう注意が必要です。
大規模データで処理が重くなる「揮発性」の落とし穴と回避策
INDIRECT関数を使いこなせるようになると、ついあらゆる場所に仕込みたくなりますが、ここで一度立ち止まる必要があります。INDIRECT関数は「揮発性関数(Volatile Function)」です。
揮発性関数とは何か?
通常のExcel関数は、参照しているセルの値が変わった時にだけ再計算されます。しかし、揮発性関数は、「シート上のどこか一箇所でも値が変わるたびに」再計算が行われます。
数千、数万行にわたってINDIRECT関数をコピーすると、セル一つ入力するたびに数秒間パソコンが固まる、といった現象が起きます。
「重いシート」にしないためのプロの回避策
もし、シートが重くなってしまったら、以下の対策を検討してください。
1. INDEX関数で代用する: 実は、INDEX関数を工夫して使うことで、INDIRECTと似たような動的参照を非揮発性(低負荷)で行える場合があります。
2. 計算結果を「値」として貼り付ける: 毎日計算する必要がない過去データなどは、一度INDIRECTで集計した後に「値として貼り付け」てしまい、数式を消してしまうのが最も確実な軽量化です。
3. Power Queryを活用する: 大量のシート集計であれば、INDIRECTを何万行も並べるより、Power Queryを使ってデータを結合する方が、動作は圧倒的に軽快です。
Microsoftの公式ドキュメントでも、パフォーマンス向上のためのチップスとして揮発性関数の制限が推奨されています。
参照:[Microsoft Learn – Excel のパフォーマンスの最適化](https://learn.microsoft.com/ja-jp/office/vba/excel/concepts/excel-performance/excel-tips-for-optimizing-performance-obstructions)
Googleスプレッドシートとの互換性と実務上の注意点
昨今の実務現場では、Excelで作成したファイルをGoogleスプレッドシートにアップロードして共同編集する機会が増えています。INDIRECT関数自体はスプレッドシートでも動作しますが、いくつか注意点があります。
IMPORTRANGE関数との使い分け
Excelにおける「別ブック参照」は、スプレッドシートでは`IMPORTRANGE`関数に相当します。スプレッドシートのINDIRECT関数で別ファイルのデータを参照しようとしても機能しません。
スプレッドシートをメインで使う場合は、INDIRECTは「同一ファイル内のシート切り替え」に留め、ファイル間連携はIMPORTRANGEと使い分ける必要があります。
挙動の細かな違い
基本的な「=INDIRECT(“A1”)」といった使い方は同じですが、シート名の解釈などで稀にエラーが発生することがあります。特にExcel独自の機能である「名前定義」を複雑に組み込んでいる場合、スプレッドシート側で正しく名前が引き継がれているか確認が必要です。
筆者が研修で勧めているのは、「Excelで作り込んだ複雑なINDIRECT構文は、スプレッドシートへの移行時に一度検証を挟むこと」です。そのままでは動かないケースが1割ほど存在するため、過信は禁物です。

現場のプロが教えるメンテナンス性を落としさないための運用ルール
INDIRECT関数は強力すぎるがゆえに、「数式が複雑になりすぎて、作った本人以外誰も直せない」という状況を招きがちです。いわゆる「Excelの属人化」です。
数式を「見える化」するためのヘルパー列
私が実務で行っている工夫の一つは、INDIRECT関数の引数となる文字列を、あらかじめ隣の列に書き出しておくことです。
いきなり `=INDIRECT(“‘” & A1 & “‘!B10″)` と書くのではなく、まずB1セルに `=”‘” & A1 & “‘!B10″` と入力し、文字列が正しく生成されているかを目で確認します。その上で、C1セルに `=INDIRECT(B1)` と書きます。
こうすることで、エラーが出た時に「文字列の組み立てが悪いのか」「参照先が悪いのか」を一瞬で切り分けることができます。
マニュアル不要の設計を目指す
「ここにシート名を入れれば自動集計されます」という注釈をセル横に添えるだけでも、後任者の負担は激減します。
初心者がつまずきやすいのは、「なぜこの数式が動いているのかわからない」という恐怖心です。INDIRECT関数を使う際は、数式の構造をシンプルに保ち、複雑な結合が必要な場合は、適宜作業セルを分けて「誰が見てもわかる」構成にすることを強くお勧めします。
ポイント: 複雑な結合を行う際は、数式バーの中で「&」の前後にスペースを入れると、視覚的に構造が捉えやすくなります。(例:=INDIRECT( A1 & “!B10” ))
明日からの実務に取り入れる3ステップ
これまで解説してきた通り、INDIRECT関数は強力な武器ですが、一歩ずつ慣れていくことが大切です。まずは以下の3ステップで、ご自身の業務に取り入れてみてください。
1. 現在の集計シートを見直す: 複数の部署や月次シートから「コピー&ペースト」や「イコール(=)」で一つずつ繋いでいる箇所はないか探してください。
2. シート名をリスト化してみる: 集計表の左端に、参照したいシート名を一列に並べてみましょう。
3. まずは1セルだけINDIRECTに変える: 全ての数式を一気に変えるのではなく、まずは1行だけをINDIRECT関数に置き換え、正しく数値が引っ張ってこれるかテストしてください。
集計業務の自動化は、小さな一歩の積み重ねです。最初は文字列結合の「”」や「&」の扱いに戸惑うかもしれませんが、一度コツを掴んでしまえば、これまでの手作業が嘘のように消えてなくなるはずです。
INDIRECT関数は、文字列を「セル参照」に変換する魔法のツール
シート名や範囲を動的に変えることで、集計作業を圧倒的に自動化できる
ただし「揮発性」があるため、多用しすぎると動作が重くなる点に注意
エラーが出た時は、シート名のクォーテーション囲みと、参照ファイルの開閉をまず疑う
この関数を使いこなすことは、単なるスキルアップ以上の価値があります。それは、あなたの貴重な時間を「データの転記」という作業から、「データの分析と改善」という、人間本来がすべき価値ある仕事へとシフトさせる第一歩なのです。



コメント