動的な参照で柔軟性を高めるINDIRECT関数-GSS/Excel/関数

動的な参照で柔軟性を高めるINDIRECT関数-GSS/Excel/関数

月別の売上データを分析する際、シート名やセル範囲を動的に変更したいことがありますよね。手動で毎回数式を修正するのは面倒です。

今回はINDIRECT関数をご紹介します。文字列でセル参照を指定できる便利な関数で、データの柔軟な取得が可能になります!早速やっていきましょう。

INDIRECT関数とは

INDIRECT関数は、文字列で指定されたセル参照を実際の参照に変換する関数です。通常のセル参照は固定されていますが、INDIRECT関数を使うことで参照先を動的に変更できます。

構文:
=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関数をマスターすることで、より柔軟で効率的なスプレッドシート作成が可能になります。ぜひ実際の業務で活用してみてくださいね!

コメントを残す