【エクセル時短】は「少しでも早く仕事を終わらせたい!」というビジネスパーソンのみなさんに、Excelの作業効率をアップするワザをお届けする連載です。

セルの値を表示するINDIRECT関数

INDIRECT(インダイレクト)関数は、文字列で指定したセル番地の値を表示するExcel関数です。単体で使われることは少なく、他の関数と組み合わせたときに重宝します。

まずは、INDIRECT関数の構文と、動作を確認しましょう。

=INDIRECT参照文字列, 参照形式

参照形式]では、[参照文字列]の形式を指定します。指定できるのはA1形式またはR1C1形式です。省略したときはA1形式となります。

一般的にはA1形式で指定することが多いため、2つ目の引数[参照形式]は省略して構いません。R1C1形式については後述します。

さっそく動作を見てみましょう。以下の例では、セルE2に数式「=INDIRECT("A2")」を入力しています。INDIRECT関数によりセルA2の値が取得され、結果は「一般」となりました。

引数[参照文字列]は、文字列で指定する必要があります。セル番地を直接指定する場合は「"」(ダブルクォーテーション)で囲んでください。

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

セルE2の数式は「=INDIRECT("A2")」で、結果は「一般」です。セル番地を直接指定する場合は「"」(ダブルクォーテーション)で囲みます。

引数[参照文字列]は、セル参照することも可能です。今度は、セルE1に参照するセル番地を入力しておき、セルE2には「=INDIRECT(E1)」と入力してみます。参照するセルE1には「A2」と入力されているので、INDIRECT関数から参照するセル番地は、先ほどと同じ「A2」。結果も同じ「一般」です。

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

INDIRECT関数が参照するセルE1には「A2」と入力されているので、参照するセル番地は「A2」となり、結果は「一般」になります。

引数[参照文字列]に指定した文字列をそのような名前のセルとして認識するという動作です。これだけでは何が便利なのかわかりませんよね。具体的な利用例を紹介します。

MATCH関数と組み合わせて値を取得する

INDIRECT関数の引数[参照文字列]は文字列で指定するので、文字列連結子の「&」で連結した文字列も指定できます。そこで、あるセルに入力した「分類」に対応した「料金」を先ほどの表から探す数式を、INDIRECT関数の引数に文字列とMATCH関数で取得した値を組み合わせたものを指定して作成してみましょう。

MATCH関数は、指定した項目をセル範囲から検索し、その範囲内の相対的な位置を返します。構文は以下の通りです。

=MATCH検索値, 検査範囲, 照合の種類

検査範囲]で指定したセル範囲から[検索値]を検索します。[照合の種類]で検索方法を指定します。「1」または省略で[検索値]以下の最大値、「0」で完全一致、「-1」で[検索値]以上の最小値となります。

1INDIRECT関数とMATCH関数を組み合わせて入力する

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

セルE1には、検索値として「シニア」と入力してあります。セルE2に「=INDIRECT("B"&MATCH(E1,A2:A5,0)+1)」と入力します。

2検索値に対応する値を取得できた

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

「MATCH(E1,A2:A5,0)+1)」は、セルA2~A5の範囲でセルE1の値(シニア)を検索して、その相対位置を返します。1行目は表のタイトルが入力されているので、「+1」して結果は「3」となります。そのため、INDIRECT関数の引数は「"B"&3」となり、INDIRECT関数はセルB3の内容を取得します。結果として「1,500」が表示されました。

VLOOKUP関数のセル範囲の切り替えに使う

VLOOKUP関数の検索対象のセル範囲を切り替えるのに、INDIRECT関数を利用できます。以下の例では、セルE3にVLOOKUP関数とINDIRECT関数を組み合わせた数式「=VLOOKUP(E2,INDIRECT(E1),2,FALSE)」が入力してあります。セルE1の内容に応じて2つの表を切り替えられるようになっているため、VLOOKUP関数を2つ記述する必要はありません。

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

セルE1の値を書き換えれば、VLOOKUP関数の検索対象のセル範囲を切り替えられます。

ポイントは、名前を付けたセル範囲を「INDIRECT(E1)」で参照させることです。この例では、セルA3~B6に「ブロンズ会員」、セルA10~B13に「シルバー会員」と名前を付けておきます。そうすることによって、セルE1に会員種別を入力すれば、VLOOKUP関数の検索対象が切り替わります。

1セルA3~B6に名前を付ける

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

セルA3~B6を選択し、名前ボックスに「ブロンズ会員」と入力して[Enter]キーを押します。

2セルA10~B13に名前を付ける

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

続けて、セルA10~B13を選択し、名前ボックスに「シルバー会員」と入力して[Enter]キーを押します。これで下準備は完了です。

3VLOOKUP関数とINDIRECT関数を組み合わせて入力する

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

セルE1には「シルバー会員」、セルE2には「ファーストデイ」と入力しておきます。セルE3には「=VLOOKUP(E2,INDIRECT(E1),2,FALSE)」と入力します。

4結果が表示された

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

「シルバー会員」の「ファーストデイ」に対応する「1,100」が表示されました。

5会員種別を切り替える

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

会員種別を「ブロンズ会員」に書き換えました。検索値の「ファーストデイ」はそのままです。結果は「ブロンズ会員」の「ファーストデイ」に対応する「1,200」となりました。もちろん検索値を変更しても結果は切り替わります。

わかりにくいと言われるINDIRECT関数ですが、動作は単純です。引き継いだファイルなどにINDIRECT関数が含まれているときは、どのセルを参照しているのかをチェックしてみてください。

HINTR1C1形式とは?

INDIRECT関数の2つ目の引数[参照形式]は、セル番地をA1形式、またはR1C1形式で指定するために利用します。「A1形式」は、セルA1、C3といった形式でセル番地を指定するのに対し、「R1C1形式」は行(Row)と列(Colomun)で指定します。以下の例を見てください。

【エクセル時短】INDIRECT関数の使い方。MATCH関数やVLOOKUP関数と組み合わせると検索を強化できる!

セルF2はA1形式、セルF3はR1C1形式でINDIRECT関数を入力してあります。どちらも結果は同じです。

R1C1形式で指定した「R2C1」は、2行目1列目という意味で、つまりセルA2のことです。ワークシート上でINDIRECT関数を入力する際は、使い慣れているA1形式を利用することが多いでしょう。

関連記事

VLOOKUP関数の使い方

ExcelのVLOOKUP(ブイ・ルックアップ)関数は、表を縦方向に検索し、特定のデータに対応する値を取り出す機能を持ちます。業務の効率化に役立つ関数として人気がありますが、引数の指定方法が複雑という難しさもあります。使い方をあらためて確認しましょう。