スプレッドシートでセル番地を直接指定する代わりに、文字列で指定できたら便利だと感じたことはありませんか。INDIRECT関数を使えば、セル番地を文字列として組み立て、動的に参照先を切り替えられます。この記事では、INDIRECT関数の基本的な使い方から、他の関数との組み合わせ、実践的な応用例までを解説します。これを読めば、柔軟なシート設計ができるようになります。
【要点】INDIRECT関数で動的参照を実現する3つの方法
- =INDIRECT(“A1”) でセル参照: 文字列で指定したセルの値を取得します。参照先が変わる場合に有効です。
- データ検証と組み合わせてシート切り替え: ドロップダウンでシート名を選び、INDIRECTで該当シートの値を表示します。
- 別シートを参照するならシート名を含める: =INDIRECT(“‘シート名’!A1”) の形式で、シート名にスペースがある場合は引用符で囲みます。
ADVERTISEMENT
INDIRECT関数の仕組みとメリット
INDIRECT関数は、文字列で与えられたセル番地を解釈し、そのセルの値を返す関数です。通常のセル参照(=A1)は固定ですが、INDIRECTは参照先を動的に変更できます。例えば、セルA1に「B1」と入力し、=INDIRECT(A1) とすると、B1の値が返ります。つまり、参照先自体をセルの値で変更できるのです。これにより、データの集計やレポート作成で、シート名やセル番地をパラメータとして扱うことが可能になります。最大のメリットは、関数の式を書き換えずに参照先を制御できる点です。
INDIRECT関数の基本的な使い方
単一セル参照の場合
- 文字列でセル番地を指定する
まず、任意のセルに参照したいセル番地を文字列で入力します。例えば、セルA1に「B1」と入力します。 - INDIRECT関数を入力する
結果を表示したいセルに =INDIRECT(A1) と入力します。すると、A1が指す「B1」セルの値が表示されます。 - 参照先を変更して動作を確認する
A1の文字列を「C1」に変えると、自動的にC1の値を参照するようになります。式を書き換える必要はありません。
範囲参照(SUMなどと組み合わせ)
- 範囲を文字列で準備する
セルA1に「B2:B10」と入力します。この範囲を合計したいとします。 - SUMとINDIRECTを組み合わせる
=SUM(INDIRECT(A1)) と入力します。INDIRECTがA1の文字列を解釈して B2:B10 という範囲を返し、SUMがその範囲の合計を計算します。 - 範囲を動的に変更する
A1の文字列を「C2:C10」に変更すれば、自動的に合計範囲が変わります。
実践的な応用例
ドロップダウンでシートを切り替える
複数のシートに月別データがある場合、ドロップダウンでシートを選んでデータを表示できます。まず、任意のセルにデータ検証でシート名のリストを作成します。次に、表示したいセルに =INDIRECT(A1&”!B2″) のように入力します。A1が「1月」の場合、「1月!B2」という参照になります。シート名にスペースがある場合は、=INDIRECT(“‘”&A1&”‘!B2”) のように引用符で囲みます。
- シート名のリストを作成する
別の場所にシート名(例: 1月, 2月, 3月)を入力し、データ検証のリストとして設定します。 - INDIRECTで動的参照する数式を書く
=INDIRECT(“‘”&A1&”‘!B2”) と入力します。A1が選択されたシート名に置き換わります。 - 他のセルにも応用する
同様に、=INDIRECT(“‘”&$A$1&”‘!C2”) のように複数列に展開すれば、そのシートの複数の値を一覧表示できます。
行番号や列番号を数式で組み立てる
ROW関数やCOLUMN関数と組み合わせると、柔軟な参照が可能です。例えば、=INDIRECT(“A”&ROW()) とすると、同じ行のA列の値を返します。これを縦にコピーすると、各行で自動的にA列の該当行を参照します。また、=INDIRECT(ADDRESS(ROW(), COLUMN())) とすれば、自分自身のセルを参照できます(循環参照にならないよう注意)。
データの並べ替えによる参照の自動追従
通常のセル参照では、データを並べ替えると参照先が変わってしまう問題があります。INDIRECTを使えば、文字列で参照先を固定できるため、並べ替え後も正しい値を参照し続けます。例えば、A列にID、B列に名前がある場合、=VLOOKUP(F1, INDIRECT(“A:B”), 2, FALSE) とすると、範囲が文字列で固定されるため、並べ替えても検索範囲がずれません。
ADVERTISEMENT
INDIRECT関数使用時の注意点
循環参照に注意する
INDIRECT自身のセルを間接的に参照すると循環参照が発生します。例えば、セルA1に =INDIRECT(“A1”) と入力すると、自分自身を参照するためエラーになります。関数の組み立て時には、参照先が現在のセルを含まないように注意してください。
シート名に引用符が必要なケース
シート名にスペースや記号が含まれる場合、INDIRECT内でシート名を一重引用符で囲む必要があります。例えば、’売上データ’!A1 のように。数式内では =INDIRECT(“‘”&A1&”‘!A1”) と記述します。シート名を直接文字列で書く場合も =INDIRECT(“‘売上データ’!A1”) とします。
開いていないスプレッドシートは参照できない
INDIRECT関数は、同じスプレッドシート内のシートのみ参照できます。他のスプレッドシートファイルを参照する場合は、IMPORTRANGE関数を使用する必要があります。INDIRECTで外部ファイルのセルを参照しようとしてもエラーになります。
ボラタイル関数であること
INDIRECTはボラタイル関数(volatile function)です。つまり、ワークシート上のどこかが変更されるたびに再計算されます。そのため、大量に使用するとパフォーマンスに影響する可能性があります。必要最小限の使用に留めることをおすすめします。
INDIRECTと他の動的参照方法の比較
| 方法 | 特徴 | 使用例 |
|---|---|---|
| INDIRECT関数 | 文字列で参照を動的に組み立てる。シート名も可 | =INDIRECT(“‘”&A1&”‘!B2”) |
| ADDRESS+INDIRECT | 行番号と列番号からセル番地を生成 | =INDIRECT(ADDRESS(1,2)) |
| OFFSET関数 | 基準セルからの相対位置で範囲を指定 | =SUM(OFFSET(A1,0,0,5,1)) |
| 直接参照(=A1) | 固定参照。並べ替えでずれる | =A1 |
OFFSETも動的参照に使えますが、INDIRECTは文字列操作に強く、データ検証との組み合わせに適しています。また、ADDRESS関数と組み合わせると、行番号と列番号を数式で自由に指定できます。
まとめ
INDIRECT関数は、セル番地を文字列として扱うことで柔軟な動的参照を実現します。基本的な使い方から、データ検証との組み合わせによるシート切り替え、ROW関数やADDRESS関数との連携まで、応用範囲は広いです。ただし、循環参照やボラタイル関数である点には注意が必要です。ぜひ、実際のシートでINDIRECTを使い、参照の自動化を試してみてください。次のステップとして、INDIRECTとQUERY関数を組み合わせて、動的なデータ抽出にも挑戦してみましょう。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
