INDIRECT関数の使い方|セルの値・文字列を数式に組み込む
ここでは、セルの値を数式に組み込むことのできるINDIRECT関数の、基本的な使い方を解説します。
INDIRECT関数はとても便利ですが、あまりなじみがなく、またエラーも出やすい関数です。
そこで、まずはINDIRECT関数でどんなことができるか、動きや使い方、使用上の注意点を説明します。
1.INDIRECT関数でどんなことができる?
まずは、INDIRECT関数でどんなことができるのか、そして読み方を確認します。
1-1.INDIRECT関数はどんなことができる?
INDIRECT関数とは「指定される文字列への参照を返す」関数です(Excelの説明を引用)。でもこれだと意味が分からないですよね。
もっと簡単に言うと、INDIRECT関数は「数式の参照先をセルの値で指定できる関数」です。
例えばセルA1に「A」、セルB1に「3」と入力し、INDIRECT関数でこれらのセルを指定すると、セルA3を参照させることができるのです。
セルの値を数式に組み込めるということは、値を変えることで参照先を簡単に変更できるということです。これって実はすごく便利です。
どのくらい便利なのかはこの後解説しますが、知るとかなりの時短になりますよ。
1-2.INDIRECT関数の読み方は?
INDIRECT関数をなじみのある関数にするために、読み方も確認しておきます。
INDIRECT関数は、「インダイレクト」と読みます。
単語的な意味は「間接的な」だそうです。
関数の中にセルの値を挿入することができる関数なので、なんとなく意味から関数の動きが分かりますよね。
2.INDIRECT関数が使われる場面は?
次に、INDIRECT関数をどんな場面で使うと便利なのかを見てみましょう。
2-1.各シートの値を一つの数式で抽出できる
INDIRECT関数を使えば、「各シートの値を一つの数式で抽出」できます。
一つ例を見てみましょう。
上の表は、営業所ごとの1月の売上金額を入力したものです。シート名は「1月」です。
そして同じ形の表が、それぞれ「2月」、「3月」というシート名であるとします。
またもうひと種類、各営業所の各月の売り上げを表示させる表がある、「年間」という名前のシートがあるとします。
そして、1月、2月、3月の売上表に入力された営業所ごとの売上金額を、年間シートの表の適切な位置に転記させたい時、INDIRECT関数がとても便利です。
なぜなら、INDIRECT関数を使った一つの数式を書いて、他のセルにその数式をコピーするだけで、あっという間に全部表示されるからです。
数式の作り方は後で解説しますが、ポイントは「年間シートのセルB4~D4のセルの値」と「ROW関数」です。
セルB4~D4は、参照したいシートの名前と一致させています。
また、INDIRECT関数は場面によって相対参照ができなくなるので、ROW関数を使うことで、同じようなことができるようにしています。
2-2.セルの値の切り替えで参照先も切り替えられる
次に、セルの値を変えることで、「数式の参照先を簡単に切り替える」こともできます。
上の表は先ほどと同じ、営業所ごとの1月の売上金額を入力したものです。シート名は「1月」です。
そして同じ形の表が、それぞれ「2月」、「3月」というシート名であるとします。
またもうひと種類、各シートの状態を表示させる表がある、「確認表」という名前のシートがあるとします。
そして、1月、2月、3月の売上表の状態を確認表で確認したい時、セルD2でシート名を指定するだけで確認することがINDIRECT関数を使うとできます。
例えば上は、1月のシートを指定しました。結果、1月シートと同じ内容が表示されています。
次に、セルの値を2月に変えてみました。結果、2月シートの内容に変わっているのが分かります。
例だと確認したいシートは3つだけなので、メリットが少ないですが、実際にシートがたくさんあった時には、シートを探すよりもセルの値を変えるだけで参照できるこの形は、とても便利です。
2-3.違うブック(ファイル)の参照も可能
INDIRECT関数では、違うブック(ファイル)の参照も可能です。
シートの場合と同じように、セルの値でブック名を切り替えることで、参照するブックを簡単に変えることができます。
このように、INDIRECT関数は数式内の参照先を、セルの値を変えるだけで簡単に切り替えられる、便利な関数なのです。
3.数式の形・引数の意味とポイント
続いて、INDIRECT関数を使った数式の形・引数とポイントを説明します。
数式の形(引数)と数式作成のポイント(注意点)が分かると、INDIRECT関数を使った数式を作れるようになりますので、それぞれ見てみましょう。
3-1.INDIRECT関数の数式の形(引数)
まず、INDIRECT関数の数式の形は、次の通りです。
(1)参照文字列
参照文字列には「参照するシートやセルを指定」します。
(2)参照形式(省略可)
参照形式では「A1形式かR1C1形式かを選択」します。通常はA1形式なので、ほとんどの場合は何も指定しなくて大丈夫です。
3-2.数式作成時のポイント
INDIRECT関数を使う時には、いくつかポイント、注意点があります。
これらを守らないと、すぐにエラーが出てしまうのがINDIRECT関数を使いづらくしている原因ですが、しっかりと押さえて使いこなせるようにしましょう。
3-2-1.引数は基本「参照文字列」だけ指定する
INDIRECT関数には引数が2つありますが、「基本的に参照文字列だけの入力でOK」です。
参照形式は「FALSE」を入れることで、「R1C1」形式という「そのセルを0地点とみなして何行(R)、何列(C)プラス、またはマイナスか?」を指定できますが、正直慣れないとかなり使いづらいです。
そのため参照形式は省略してよく、結果INDIRECT関数で指定するのは「参照文字列」のみになります。
3-2-2.可変は「セル番号か関数」、不変は「文字列」
参照文字列では「可変部分をセル番号か関数」、「不変部分を文字列」で指定します。
可変とは「場合によって変えたい部分」、不変は「どの状況でも変わらない部分」のことを言います。
例えば、シートを切り替えたければシート名が可変に、行番号を切り替えたければ行番号が可変になります。
上の例ではセルB4に
=INDIRECT($D$2&"!B"&ROW())
という数式が入っています。
この数式は「セルD2で指定したシートのB列の4行目(4行目に入れたROW()は4が返ってくるため)の値を返しなさい」という意味です。
そして、数式を分解してみると、
$D$2 ⇒ シート名はセルD2を見る(可変)
"!B" ⇒ 列番号はBで固定(不変)
※厳密には「!」は列番号ではないのですが…
ROW() ⇒ 行番号はROW関数の返す値(可変)
となります。
このように参照文字列には、可変の場合「セル番号か関数」で、不変の場合「文字列」で指定することが必要です。
3-2-3.文字列は「"」でくくる
参照文字列において、「文字列は『"』でくくる」必要があります。
例えば「どんなシートでもセルB4を参照する」と、B4を固定化したい時には文字列なので「"B4"」となります。
反対に「参照するのはセルB4の値と一致するシート」と、B4を可変化したい場合には文字列ではないので「"」をつけずに「B4」となります。
3-2-4.可変部分と不変部分を「&」でつなげる
参照文字列は、「それぞれ指定した可変部分と不変部分を『&』でつなげる」必要があります。
先ほど例で見た数式は、次の通りでした。
=INDIRECT($D$2&"!B"&ROW())
このように、INDIRECT関数は「&」でつなげることで、一つの数式になります。
3-2-5.特定の記号が使われたシート名は「'」でくくる
シート名に~などの記号が使われている場合、「シート名は『'』でくくる」必要があります。
でないと#REF!エラーになります。
この話はちょっと長くなるので、以下のページで解説しています。
4.INDIRECT関数の簡単な使い方
最後に、最後に、INDIRECT関数の簡単で便利な使い方の説明です。
4-1.まずはINDIRECT関数なしの形を確認する
INDIRECT関数は、数式作成でエラーが出やすい関数になっています。
その理由は、一つでも「"」が足りないとダメであったり、シート名によっては「'」を付けなければならないのに付けていなかったりといったことですが、最大の理由は「なぜエラーになるのかが分かりづらい」ことにあります。
そこでまずは、INDIRECT関数を使わない場合の数式の形を表示させて、それを参考にINDIRECT関数を使った数式を作るのがおすすめです。
その場合、数式はそのままだと数式バーだけに表示されて見づらいです。
そこで、数式の頭に「'」を付けて文字列にしましょう。
このままだと見づらいので…、
頭に「'」を付けて文字列にすると見やすいです。
4-2.あとは分解して&でつなぐ
あとは数式を分解して可変ならセル番号か関数、不変なら文字列にして、&でつなぎます。
そもそも数式は、
=[シート名]![列番号][行番号]
の形です。
この中で可変にしたい部分と不変のままの部分を決め、不変のままの場合には文字列にするため「"」で囲い、&でつなげればいいのです。
4-3.数式作成の例
最後に、INDIRECT関数を使った数式を作ってみます。
数式は「Sheet1のセルA3で指定したシート(Sheet2)のセルA1の値(test)を持ってくる」というものです。
上の図は、Sheet2の状態です。
では作ってみましょう。
(1)Sheet1の適当なセルにSheet2のセルA1を参照する、INDIRECT関数を使わない数式を入力する
(2)作成した数式の頭に「'」を付ける
(3)その数式を参考にしながら、セルA1に「=INDIRECT(」と入力する
(4)シート名が入っているセルA3をクリックする
(5)「&」を入力する
(6)「"!A1!"」を入力する
(7)Enterを押して、セルC1の数式を消せば終了
このように、INDIRECT関数を使わない数式の形を参考にすれば、「!」を付け忘れないなど、エラーがなく数式を作れます。
以上、参考になれば幸いです。
【口コミ・評判のいいExcel本の紹介】