INDIRECT関数を用いて参照を使いこなす!シート参照や入力規則との組み合わせを解説

INDIRECT関数

INDIRECT関数とは、文字列を使ってセル参照ができる関数です。「”」ダブルクォーテーションで囲った文字列や、セルに入力した文字列を利用できます。セル参照といえば「=」を使った参照をイメージしますが、INDIRECT関数は「=」では実現できない機能を持った関数です。使いどころが難しく、活用イメージがわかないこともあると思いますので、今回は表のまとめや帳票作成に役立つアイディアをご紹介します。

こんな方におすすめ
  • INDIRECT関数の概要を知りたい
  • 実際の使用シーンを学びたい
  • 他の関数との組み合わせや別シート参照などの応用編も知りたい
目次

INDIRECT関数とは別シートでもセル参照できる関数

INDIRECT関数は、シート名を使って別シートへの参照ができる関数です。他のシートを参照するだけではなく、参照するシートを用途に応じて変えられます。計算式の結果を、その時点のデータに基づいて変化させられることが特徴といえます。

INDIRECT関数の書式は「INDIRECT(参照文字列,[参照形式])」

INDIRECT関数の引数は、参照文字列と参照形式の2つです。

=INDIRECT(参照文字列, [参照形式])

参照文字列には、文字列でセル番地か、セル範囲を指定する必要があります。参照形式は省略可能です。省略する場合は、A1形式(TRUE)を入力します。R1C1形式(FALSE)を指定するときは、「FALSE」を入力します。

【POINT】A1形式・R1C1形式とは?

A1形式とは、普段Excelで見慣れている、列をA、B、Cと表し、行を1、2、3と表す方法です。(A1、G7など)

R1C1形式とは、A列は1、B列は2、C列は3と列数も数字で表します。数字は計算式に利用できるため、R1C1形式の方がより複雑な参照が可能です。(A1セル=R1C1、C2セル=R2C3)

慣れるまでは、分かりやすいA1形式から使うと理解しやすいでしょう。R1C1形式の使い方は「R1C1形式でまとめシートを作る」で詳しくご説明します。

「=」とは異なる!INDIRECT関数の特徴

セル参照といえば「=」を使う方法が一般的です。別シートへの参照も、「=シート名!セル番地」で指定できます。あえて、INDIRECT関数を使う理由はどこにあるのでしょうか?

行と列を別々に指定できる

「=」とINDIRECT関数を比較します。

参照方式書式
==A1
INDIRECT関数=INDIRECT(“A1”)
INDIRECT関数=INDIRECT(“A”&”1”)

例に挙げた3つの式は、いずれも「A1」を参照し、値を表示します。ただし「A1」の表現方法が異なります。INDIRECT関数の引数には、最終的にセル番地かセル範囲を表す文字列と認識できれば、何を入れてもかまいません。行と列を、それぞれ分割して表現できるため、他の関数を使って行数や列数を算出し、参照を変化させられます。また、INDIRECT関数は、単体で使用することはほとんどありません。他の関数と組み合わせることで真価を発揮する関数です

セルに入力した文字列をセル番地やセル範囲に変換する

INDIRECT関数は、セルに入力された文字列をセル番地やセル範囲として認識することも可能です。文字列であることの利点は、シート名や名前を付けたセル範囲が使えることです。複数のシートや複数のセル範囲にわたる情報を、必要な項目だけ呼び出せます。下記例では、県庁所在地のセルに、県名を使った名前を付けました。入力した県名を変えることで、瞬時に県庁所在地を参照します。

県名と県庁所在地一覧を使って、県名を変えると県庁所在地が変わる

セル範囲を使う他の関数に入れ子にすることで、複数のセル範囲を用途によって呼び出せます。

セルに名前を付ける方法はこちらをご覧ください。

INDIRECT関数の活用シーン

INDIRECT関数は、セル範囲に付けた名前を利用して、複数のセル範囲を使い分けられます。またシート名を利用して、別シートへの参照も可能です。

他の関数と組み合わせて複数のセル範囲を使い分ける

セルに入力した文字列をセル範囲に変換できるINDIRECT関数の特徴と、名前を付けたセル範囲を組み合わせれば、計算結果を変化させられます。項目名の名前を付けることで、項目名を利用した参照が可能です。そのとき必要な項目だけを抽出するような用途に利用できます。引数にセル範囲の指定が可能な、SUM関数やVLOOKUP関数を入れ子構造にすれば、用途に応じた計算結果を表示させられます。

INDIRECT関数をSUM関数とCOUNTA関数と使用する例

従業員全員の日々の勤務時間が入力されたリストがあります。リストの上部には、任意の従業員名を選べる枠を設けます。従業員名を選択することで、勤務時間合計と勤務日数が瞬時に確認できる方法です。勤務時間合計をSUM関数で、勤務日数をCOUNTA関数で算出します。

従業員ごとにセル範囲に名前を付ける

従業員の日々の勤務時間が入力されたセル範囲に、氏名を使って名前を付けます。

手順①
└定義された名前
└選択範囲から作成(一度に名前を付ける)
└入力規則を使ってドロップダウンリストを作成

上記例のように、情報が1行や1列に並んでいるときは、左端や上端の項目名を使って名前を付けることがポイントです。名前を付けるために使用した氏名欄は、そのまま入力規則の追加にも利用できます。入力規則を使えば、ドロップダウンリストから氏名を選択できて便利です。

2つの関数の計算範囲をINDIRECT関数で指定する

セル範囲に名前を付け、入力規則で選択できるようになれば、SUM関数とCOUNT関数とINDIRECT関数を入力します。どちらもA2セルに入力した氏名を、セル範囲として利用します。

手順② SUM関数とINDIRECT関数、COUNT関数とINDIRECT関数を入力

ドロップダウンリストで氏名を変更すると、勤務時間と勤務日数が変わるようになりました。

手順③ ドロップダウンリストを変更して数値が変わる

MAX関数やMIN関数、AVERAGE関数など、セル範囲を使用する関数に応用できます。

INDIRECT関数をVLOOKUP関数と使用する例

利用者の年齢区分ごとに金額の異なる料金表から、調べたい単価を求める数式を作ります。VLOOKUP関数のセル範囲を、一般・小学生・未就学児ごとに名前を付けることで、変化させる方法です。VLOOKUP関数の検索値である宿泊メニューも変化させています。

年齢区分ごとにセル範囲に名前を付ける

一般・小学生・未就学児の料金一覧に、ひとつずつ名前を付けます。また、料金形態を3つの区分から選べるように、入力規則を手入力で指定します。

手順①
└定義された名前
└名前の定義
└入力規則を使ってドロップダウンリストを作成

VLOOKUP関数の検索値となる宿泊メニューも、入力規則を使って選択できるようにすると便利です。

VLOOKUP関数のセル範囲をINDIRECT関数で指定する

単価の欄に、VLOOKUP関数を入れ、セル範囲をINDIRECT関数で指定します。

手順② VLOOKUP関数の範囲をINDIRECT関数で指定し、結果が変化

VLOOKUP関数の検索値は、宿泊メニューのB2セルを参照します。INDIRECT関数の引数は、料金形態を表すA2セルです。名前を付けたセル範囲を呼び出します。列番号は、2列目に単価が入力されているため「2」です。

=VLOOKUP(B2,INDIRECT(A2),2)
2行目

料金形態を変更すると、一般・小学生・未就学児の各セル範囲を参照します。宿泊メニューは、VLOOKUP関数の検索値です。選択したメニューと同じ文字を探して、単価を表示させます。この方法は、HLOOKUP関数やXLOOKUP関数にも応用可能です。

別シートのシート名を使って参照する

別シートを参照する際は「シート名!セル番地」と入力します。INDIRECT関数を使うと、このシート名の部分をセルに入力する値で変化させられます。いくつかのシートに分かれたブックのまとめシートを作成するときに活用できる方法です。

ドロップダウンリストでシート名を切り替える

INDIRECT関数を使うと、ドロップダウンリストでシート名を切り替えて参照できます。たとえば、1商品に1シートを使って、商品スペックを記載したブックがある場合です。そのブックにスペック比較のシートを追加する例をご紹介します。

スペック比較表に入力規則を追加する

横並びで2つの商品が選べるように表を作ります。また、商品選択欄には入力規則を使って商品名を選べるようにします。

手順①
└各シートの状況確認
└比較表の一番上に入力規則を追加し商品名を選べるようにする

シート名を商品名に設定し、比較表の商品名を変えることで参照するシートが切り替わる方法です。

比較表にINDIRECT関数を入力する

入力規則を使って、シート名を選択できるようにしたら、INDIRECT関数を入力します。

手順② 比較表にINDIRECT関数を入力すると、商品を変更し表示が変わる

B2セルで選択した商品をシート参照するため、B2セルを入力します。セルと文字列をつなげるため、間には「&」が必要です。シート名を表す「!」と、サイズ情報が記載されたB3を組み合わせて「”!B3”」とつなげます。

=INDIRECT(B2 & “!B3”)
3行目

比較したい商品を選ぶと、INDIRECT関数が選んだ商品のシートを参照します。必要な情報が随時変わるような場面で活用できる方法です。

まとめシートに情報を集約する

シート名を使った参照を利用して、複数のシート情報をまとめられます。たとえば、従業員ごとのシートに分かれた、残業時間を入力するファイルがあります。この残業時間の月合計を、まとめシートに集約する方法です。

まとめシートにシート名を使った一覧表を作る

各シートには、従業員の残業時間が入力されています。まとめに、シート名(従業員名)と対応するセルを用意して、準備をします。

手順①
└各シートの内容を確認
└まとめシートにシート名と同じ名前を入れる

ここで指定したシート名に紐づくため、後から従業員の順番を変えることができます。

シート名とINDIRECT関数を使って合計時間を参照する

A列のシート名とINDIRECT関数を使って、各シートの残業時間合計を参照します。1月がB列、2月はC列とそれぞれ指定する方法です。

手順② INDIRECT関数を入力して、シート情報を参照

このままでも使えますが、B、C、Dと月ごとに列を指定するため、列数が多いと手間がかかります。今回のように、1月、2月、3月と横並びに連続した情報を取得するなら、INDIRECT関数のR1C1形式を使って列を指定すると計算式をコピーできるため便利です。

R1C1形式でまとめシートを作る

R1C1形式は、列をA、B、Cではなく、1、2、3と表す方式です。「R行数C列数」で表します。

A1方式とは行と列の順番が変わるため、間違えないようにしましょう。

たとえば、R1C1形式のA1セルへの絶対参照は以下です。

=INDIRECT(“R1C1”,FALSE)

また、A1形式では表現できない相対参照も、R1C1形式では指定可能です。相対参照は入力するセルからの位置関係で表します。自分のセルは数字なしの「RC」です。

=INDIRECT(“RC”,FALSE)

自分のセル(RC)を0として、[ ]を使ってプラスマイナスで位置関係を表すことで、相対的な参照ができます。自分のセルから1行下は「R[1]C」、1列左は「RC[-1]」です。

合計数の入力された列を参照する

「田中・1月」のB3セルに計算式を入力し、他のセルにコピーすることを想定します。各個人の残業合計は、B3、C3、E3セルに入力されているため、行数「3」は固定です。そのため、行数は「R3」で絶対参照します。

まとめシートと各個人シートの合計数の場所は合わせています。そのため、まとめシートの列数をそのまま求めるだけで実行可能です。列数は、相対参照で自分のセルの場所を表す「C」を入れます。

A列で指定したシート名は、列方向へのコピーの影響で位置がずれないように列だけ絶対参照にしましょう。

以下のように、列だけ絶対参照の「$A3」にすれば完成です。

=INDIRECT($A3 & “!R3C”,FALSE)

列が増えても対応できる

作成した数式を他の行や列にコピーし、正しく表示されることを確認します。列を追加しても、コピーして使えるため便利です。

計算式をコピーして他のセルに貼付けし、参照が合っていることを確認

まとめシートと各シートの行や列が異なる場合は、[ ]を使います。まとめシートからみた位置関係を[ ]内に数字で表現すれば、行や列がずれていても参照できます

まとめ

INDIRECT関数は、文字列をセル番地に変換できる便利な関数です。セルに入力した文字列を使って参照する場所を変化させられます。また、シート名を使った別シートへの参照も簡単にできます。他の関数との組み合わせにより、さまざまな使い道がある関数です。帳票作成の際に覚えておくと重宝するでしょう。

「Excel最新機能を学んで成長したい」
「日々の業務を効率化できるExcel技を知りたい」

そんな方にはユースフルの【無料体験版】ExcelPro講座がオススメです!元伊藤忠商事経理でExcel実務のプロ、長内孝平(おさ)のExcel技を無料で8時間分も学習できるオンライン動画講座です。

気に入ったらシェア!
  • URLをコピーしました!
目次