INDIRECT関数は参照したいセルの文字列(A1、R1C1、または、セルにつけた名前)を指定すると、そのセルに入力されている値を返す関数です。
INDIRECT関数は単体で使用することはほとんどありませんが、他の関数と組合せると動的に指定範囲を変更することができて便利です。
本記事では、INDIRECT関数の基本を押さえていきます。
INDIRECT関数の使い方
INDIRECT関数の書式は下記である。
=INDIRECT(参照文字列[, 参照形式])
参照文字列:A1 形式、R1C1 形式の参照、セルの名前の参照を指定します。
参照形式(省略可):参照文字列の形式を指定。規定値はTURE
TURE:参照文字列の入力形式を「A1 形式」と判断する。
FALSE:参照文字列の入力形式を「R1C1形式」と判断する。
※参照文字列をセルの名前とする場合は、TUREとFALSEどちらもで正しく認識する。
基本的な使い方
INDIRECT関数を使ってみます。
まずは、A1形式での使用例を見てみます。
参照形式:A1形式
C4のINDIRECT関数の第1引数の参照文字列を直接入力しています。文字列として認識させる必要があるためダブルクォーテーション「”」で囲んでいます。A2の値を返すため、東京と表示されています。
しかし、単純にセル番地を入力する使い方をすることはありません。例えば、別のセルに入力されたセル番地を指定する使い方をすることが多いです。C4のセルでは、参照文字列にD2と入力されているので、D2のセルに入力されている文字のA2となり、A2の値の東京が表示されています。
「=INDIRECT(D1) 」
→「=INDIRECT(“A2”)」
→「東京」
C5のセルには、第2引数の参照文字列にTUREを入力した結果です。省略したときの規定値と同じなので同じ結果となっています。
参照形式:R1C1形式
参照文字列はR1C1形式で指定することもできます。
RはRow(行)、CはColumn(列)を意味します。左上のセルから何列目の何行目かを指定することができます。
R1C1形式を使用する場合は、第2引数の参照形式を「FALSE」にします。
下図は上記のA1形式のINDIRECT関数をR1C1形式に書き換えたものです。「A2」は左上のセルから2行目、1列目のせるになるのでセル番地は「R2C1」と指定すれば問題ありません。
参照文字列をセルの名前で指定する
最後はINDIRECT関数の参照文字列をセルの名前でしていする方法です。
この方法を使う場合は、指定するセルに事前に名前を付ける必要があります。
まず、セルまたはセルの範囲を選択します。
ここでは、東京、名古屋、大阪が入力された「A2:A4」を選択します。
次に、「数式」→「定義された名前」→「名前の定義」を選択します。
下図のポップアップウィンドウが表示されるので、名前の項目に「出身地」と入力し、「OK」をクリックします。
数式バーの左側のドロップダウンリストに「出身地」といいうセルの名前が出てくるようになりました。これでセルに名前が付いていることが確認できました。
C4のセルにINDIRECT関数の第1引数にセルの名前が入力されているD1を指定すると、「A2:A4」の値が表示されました。
別シートのデータを取得する
INDIRECT関数で複数のシートからデータの取得を取得します。
決められたフォーマットに入力された各支社の月毎(1月~3月)の売上データのシートがあります。
INDIRECT関数で各シートの東京支社の売上を抽出します。
INDIRECT関数の参照文字列はシートを含めたセル番地を指定することもできます。
シートを含めた場合のセルの指定は「シート名」の後ろにビックリマーク(半角)「!」とし、その後ろのセル番地を入力します。
例えば、1月の東京支社の売上が入力されたセルは「1月!B2」となります。
A3のセルにシート名(1月)を入力し、INDIRECT関数の第1引数に「A3&”!B2”」とすると、東京支社の1月の売上を表示することができます。
A3のセルに入力した月を2月や3月に変更すると数式は変更しなくても、下記のように抽出されるデータは変更されるようになります。
まとめ
INDIRECT関数の参照文字列はXMATCH関数やADDRESS関数などを使うと動的に返す値を変更することができるようになります。
また、多くの関数では、セルもしくはセル範囲の指定を指定します。この指定をINDIRECT関数を使うことで、動的にセルもしくはセル範囲を変更することができます。
INDIRECT関数の実務での利用例は別の規格に紹介します。