スプレッドシートINDIRECT関数の使い方|指定したセルを参照して値を間接的に取得

記事内の「“”」「‘’」が全角になっていますが、スプレッドシートで指定する場合は半角に変更してください

本記事では、スプレッドシートのINDIRECT関数について解説していきます。

具体例を使いながら解説していますので、ぜひ参考にしてみてください。

目次

スプレッドシートのINDIRECT関数

スプレッドシートのINDIRECT関数は、指定したセルを参照し値を間接的に取得できる関数です。下記のように指定します。

INDIRECT(セル参照の文字列, [A1 形式にする])

スクロールできます
引数説明
セル参照の文字列参照するセルを指定。文字列の場合は「””」で囲む
A1形式にする[省略可 – デフォルトTRUE]セル参照の形式をA1形式にするかR1C1形式にするかを選択
(R1C1形式を選択する場合はFALSEを指定)

第2引数のA1形式にするかR1C1形式にするかの選択ですが、基本的には省略(TRUE)で問題ありません。

  • A1形式
    「A1」「G10」「A1:D5」のような一般的な形式

  • R1C1形式
    行・列を番号で指定する形式
    「A1」→「R1C1」
    「G10」→「R10C7」
    「A1:D5」→「R1C1:R5C4」

R1C1形式は、Rが行・Cが列を表しています。

文章だとINDIRECT関数の使い方がイメージしづらいと思いますので、簡単な例を2つご紹介します。

INDIRECT関数の使い方①文字列で指定する

1つ目の例が文字列で指定するパターンです。

=INDIRECT(“A2”)

上記の例は、A2セルの値(りんご)を文字列として取得しています。

これだけだと、「=A2」と同じ結果になるためINDIRECT関数を使うメリットがほとんどありません。そこで次のパターンです。

INDIRECT関数の使い方②セルを間接的に参照する

2つ目の例が、セルを間接的に参照するパターンです。

=INDIRECT(D1)

こちらは例①のときと違い、セル番号を「””」で囲まず直接指定しています。考え方としては下記のようなイメージです。

D1セルを参照→D1セルに入力されているA2セルの値を文字列で取得

つまり、A2セルの値をD1セルを介して取得しているということになります。

ここまででINDIRECT関数の使い方は何となくわかったかと思いますが、使う場面やメリットがイメージできないでしょう。

次に作業の効率化・メンテナンス性が高い使い方をご紹介していきます。

実務でもよく使うINDIRECT関数を使った例

先程ご紹介したように、INDIRECT関数だけで使用するケースはほとんどありません。

INDIRECT関数はほかの関数と組み合わせることで便利になり、特にVLOOKUP関数との組み合わせで真価を発揮します。

今回は以下のような例をご用意しました。

やりたいこと

6月・7月・8月の合計点をそれぞれのシートから取得し、3ヶ月の合計を算出したい

STEP
必要な各シートを用意

各月のシートを用意します。シート名は「6月」「7月」「8月」と、集計用の「マスタ」の4つです。

STEP
「マスタ」のC2セルにVLOOKUP関数を入力

=VLOOKUP($A2,’6月’!$A$3:$E$11,2,false)

VLOOKUP関数で「佐藤」の6月の合計点が取得できました。C2セルに入力した関数をC10セルまでコピーしましょう。

これで各行の6月の合計点が取得できました。

7月・8月も関数をコピーしてシート名を修正すれば取得できますが面倒ですよね。そこでINDIRECT関数の出番です。

STEP
C2セルに入力した関数を修正

=VLOOKUP($A2,INDIRECT(C$1&”!$A$3:$E$11″),2,false)

VLOOKUP関数の第2引数は参照する範囲を指定するのですが、ここでINDIRECT関数を使用します。わかりやすいように、INDIRECT関数を使っていないときと比べてみましょう。

INDIRECT関数未使用

‘6月’!$A$3:$E$11

INDIRECT関数使用

INDIRECT(C$1&“!$A$3:$E$11”)

‘6月’C$1

「6月」というシート名をセル参照に変更しています。これでC1セルの値がシート名として扱われます。

!$A$3:$E$11“!$A$3:$E$11”

範囲は変わりませんが、文字列として指定するため「””」で囲む必要があります。最後に「&」でつないで完了です。

STEP
関数を全てのセルにコピー

手順3で関数を入力できたら、合計点を取得したいセル(C2〜E10)全てにコピーします。

これで、各月の合計点数が全て正しく取得できたと思います。

INDIRECT関数を使わないとシート名を手作業で修正しないといけませんが、セル参照にすることでその作業を削減することができました。

今回はたった3列でしたが、列数が何百・何千となる場合は非常に時短できます。

まとめ

今回は、スプレッドシートのINDIRECT関数について解説してきました。特にVLOOKUP関数との組み合わせはよく使う手法です。

VLOOKUP関数の使い方がわからない方は「【スプレッドシート】VLOOKUP関数の使い方まとめ|応用テクニックあり」で解説していますのでチェックしてみてください。

目次