爆速効率化 ~INDIRECT関数 応用編/コピペで使える実務集~
はじめに
「INDIRECT関数は知っている。でも実務でどう使えばいいか、いまいちピンとこない…」
そんな方に今すぐ使えるINDIRECT関数の実務例を記事にまとめました。
INDIRECT関数とは(ざっくりおさらい)
INDIRECT関数とは、「文字列をセル参照に変換する」 関数だ。
通常の数式はセル番地を直接指定する。INDIRECTはその番地を「文字列」として受け取るため、セルの内容や数式で参照先を動的に組み立てられる。
=INDIRECT("Sheet1!A1") → Sheet1のA1を参照
=INDIRECT(A1) → A1に書かれた文字列をセル番地として参照一言でいうと、「どこを見るか」を数式で制御できる関数だ。
基本的な構文・動作については以下の記事で詳しく解説しているので、初めて触れる方はコチラの基礎編を ↓ ↓ ↓
基本編でINDIRECT関数の仕組みを理解した後、多くの人が壁にぶつかるのがこの段階だ。この記事では、業務で即コピペして使えるINDIRECT × 他関数の組み合わせパターンを4つ紹介する。月次集計・支店別管理・条件集計など、実際の業務シーンに当てはめてそのまま使ってみてください。
INDIRECT関数が「他関数と組み合わせる」ことで真価を発揮する理由
まず前提を整理する。INDIRECT関数単体でできることは「文字列をセル参照に変換する」だけだ。この関数が強力なのは、「参照先を文字列として操作できる」 という性質を他関数に渡せる点にあります。
通常の参照: =SUM(Sheet1!B2:B10) → 固定。シートが増えるたびに書き直す
INDIRECT使用:=SUM(INDIRECT(A1&"!B2:B10")) → A1の値を変えるだけで参照先が切り替わるBefore / After で見るとこうなる:
状況Before(固定参照)After(INDIRECT)月次12シートの集計数式を12行ベタ書き1行の数式+月名プルダウン支店を追加したとき全数式を書き直しシートを追加するだけ参照先変更の工数都度手修正セルの値を変更するだけ
実務パターン① INDIRECT × VLOOKUP|検索先シートを動的に切り替える
使う場面:
支店別・月別にシートが分かれており、どのシートを検索するかを動的に変えたい場合。
数式の骨格
=VLOOKUP(検索値, INDIRECT(シート名セル&"!範囲"), 列番号, FALSE)具体例:
「東京」「大阪」「名古屋」の各シートに売上データがある。セルB2に支店名を入力すると、自動的にそのシートから商品コードで売上を取得する。
=VLOOKUP($A4, INDIRECT($B$2&"!B5:C13"), 2, FALSE)

ポイント:
$B$2 は支店名が入ったセル(ドロップダウンにすると操作性が上がる)
"!B5:C13" は各シートで共通のデータ範囲
支店を追加してもシートさえ作れば数式の変更不要
実務パターン② INDIRECT × SUMIF|シートをまたいだ条件付き集計
使う場面:
月別シートから「特定カテゴリの売上だけ合計したい」など、条件を絞って複数シートを集計したい場合。
数式の骨格
=SUMIF(INDIRECT(シート名セル&"!条件範囲"), 条件, INDIRECT(シート名セル&"!合計範囲"))具体例:
集計シートのB2に集計したい月名(「3月」など)が入っている場合:
=SUMIF(INDIRECT(B2&"!A:A"), "アパレル", INDIRECT(B2&"!C:C"))B2に「3月」と入れると、3月シートのA列が「アパレル」の行のC列合計を返す。


ポイント:
条件範囲・合計範囲の両方をINDIRECTで動的指定する必要がある
INDIRECT内は列参照(A:A)にすると範囲のズレが起きにくい
実務パターン③ INDIRECT × COUNTIF|件数をシートごとに動的カウント
使う場面:
「各担当者のシートで、未完了タスクが何件あるか一覧で見たい」など、カウント対象のシートを切り替えたい場合。
数式の骨格
=COUNTIF(INDIRECT(シート名セル&"!範囲"), 条件)具体例:
担当者名が集計シートのA列に並んでおり、各担当者のシートに進捗ステータスが入っている場合:
=COUNTIF(INDIRECT(A2&"!C:C"), "未完了")A列を下にコピーするだけで、各担当者シートの未完了件数を一覧化できる。


ポイント:
シート名にスペースが含まれる場合は INDIRECT("'"&A2&"'!C:C") のようにシングルクォートで囲む
実務パターン④ INDIRECT × INDEX+MATCH|2軸で動的参照する最上位パターン
使う場面
「支店×月」という2軸でデータを引きたい場合。VLOOKUPより柔軟な参照が必要なシーン。
数式の骨格
=INDEX(INDIRECT(シート名セル&"!範囲"), MATCH(行キー, INDIRECT(シート名セル&"!列範囲"), 0), MATCH(列キー, INDIRECT(シート名セル&"!行範囲"), 0))具体例:
支店別シートから、指定した商品コード × 指定した月の売上を取得する:
=INDEX(INDIRECT($B$2&"!B2:M20"), MATCH($A4, INDIRECT($B$2&"!A2:A20"), 0), MATCH(C$3, INDIRECT($B$2&"!B1:M1"), 0))$B$2:支店名(シート名)が入るセル
$A4:商品コード(行キー)
C$3:月名(列キー)
VLOOKUPと違い、検索列が左端でなくてもよい


注意点:INDIRECT関数の弱点を知っておく
弱点内容対策揮発性関数ファイルを開くたびに全セル再計算が走る大量行に適用しない。参照範囲を最小化するシート名変更に弱いシート名が変わると参照先もエラーになるシート名をセルで管理し、変更は1箇所で完結させる閉じたファイルは参照不可参照先ブックが閉じていると #REF! になる同一ブック内での運用を前提とする
まとめ
パターン主なユースケース
① INDIRECT × VLOOKUP 支店・担当別シートから検索
② INDIRECT × SUMIF 月別・カテゴリ別条件集計
③ INDIRECT × COUNTIF 進捗・ステータスの件数一覧
④ INDIRECT × INDEX+MATCH 2軸クロス参照の最上位系
INDIRECT関数は「参照先を文字列で制御できる」という性質を使って、数式の保守コストを大幅に下げる関数だ。一度正しく組めば、シートを追加してもセルの値を変えるだけで対応できる。まずはパターン①か②から業務に当てはめてみて試してみてください。
◆お問い合わせ
ExcelやPython、AIを使った業務効率化・自動化の設計・構築や実務記録を配信中。
▶詳細なご相談は [ X(旧Twitter)@shouhei_furu ]