動的な参照で柔軟性を高めるINDIRECT関数-GSS/Excel/関数
動的な参照で柔軟性を高めるINDIRECT関数-GSS/Excel/関数
月別の売上データを分析する際、シート名やセル範囲を動的に変更したいことがありますよね。手動で毎回数式を修正するのは面倒です。
今回はINDIRECT関数をご紹介します。文字列でセル参照を指定できる便利な関数で、データの柔軟な取得が可能になります!早速やっていきましょう。
Contents
INDIRECT関数とは
INDIRECT関数は、文字列で指定されたセル参照を実際の参照に変換する関数です。通常のセル参照は固定されていますが、INDIRECT関数を使うことで参照先を動的に変更できます。
構文:
=INDIRECT(参照文字列, [A1形式])
=INDIRECT(参照文字列, [A1形式])
項目 | 売上 | 担当者 |
---|---|---|
商品A | 150000 | 田中 |
商品B | 200000 | 佐藤 |
商品C | 120000 | 鈴木 |
基本的な使い方
まずは基本的な使い方から見ていきます。A1セルに「B2」という文字列が入っている場合、INDIRECT(A1)は実際にB2セルの値を取得します。
=INDIRECT("B2") // B2セルの値を取得
=INDIRECT(A1) // A1セルに入っている文字列をセル参照として使用
ポイント:
参照文字列は必ず有効なセル参照である必要があります。存在しないセルを参照するとエラーになります。
実践例1:月別データの動的取得
各月のデータが別々のシートに保存されている場合、INDIRECT関数を使って月を選択するだけでデータを切り替えることができます。
対象月 | 4月 | ||
---|---|---|---|
商品 | 売上 | 数量 | 単価 |
商品A | =INDIRECT(B1&"!B2") | =INDIRECT(B1&"!C2") | =INDIRECT(B1&"!D2") |
=INDIRECT(B1&"!B2") // B1の月名 + "!B2" でシート参照
B1セルで月を変更するだけで、自動的に該当月のシートからデータを取得できます。
実践例2:範囲の動的変更
データ範囲を動的に変更したい場合にも有効です。最終行が変わるデータリストで威力を発揮します。
=SUM(INDIRECT("A1:A"&COUNTA(A:A))) // A列の最後のデータまで合計
=AVERAGE(INDIRECT("B1:B"&E1)) // E1セルで指定した行まで平均
注意:
INDIRECT関数はセル参照を文字列で指定するため、参照先のセルやシートが削除されるとエラーになります。
実践例3:データ検証との組み合わせ
データ検証のリストと組み合わせることで、選択肢に応じて異なるデータを表示できます。
部署選択 | 営業部 |
---|---|
部署データ | =INDIRECT(B1&"_データ") |
// 名前付き範囲「営業部_データ」「経理部_データ」などを事前に定義
=INDIRECT(B1&"_データ") // 選択された部署のデータ範囲を参照
絶対参照と相対参照の活用
INDIRECT関数でも絶対参照($)を使用できます。特に数式をコピーする際に重要です。
=INDIRECT($A$1&"!B"&ROW()) // A1は固定、行番号は動的
=INDIRECT("Sheet"&COLUMN()&"!A1") // 列番号に応じてシート選択
INDIRECT関数内の参照文字列では、通常の絶対参照記号($)も文字列として扱われるため、適切に配置する必要があります。
まとめ
INDIRECT関数の使い所
- シート名や範囲を動的に変更したいとき
- ユーザーの選択に応じてデータソースを切り替えたいとき
- データ範囲が可変的な場合の計算
構文
=INDIRECT(参照文字列, [A1形式])
例文
- INDIRECT("A1:A"&COUNTA(A:A))
- INDIRECT(B1&"!C2:C10")
- INDIRECT($A$1&"_データ")
活用のコツ
- エラー処理にISERROR関数やIFERROR関数と組み合わせる
- 名前付き範囲と組み合わせて可読性を向上させる
- データ検証機能と組み合わせてユーザビリティを高める
INDIRECT関数をマスターすることで、より柔軟で効率的なスプレッドシート作成が可能になります。ぜひ実際の業務で活用してみてくださいね!