「参照するシートをリストで切り替えることってできる？」
一見なじみの薄いINDIRECT関数。説明を聞いても分かりづらい関数の一つです。
しかしINDIRECT関数はすごい潜在能力を秘めていて、理解して使えばエクセルのスキルが一気に数段アップします。
ここではINDIRECT関数の基本的使い方と目からウロコの応用テクニック３選を紹介します。
これで簡単に参照先を切り替えることができるようになりますよ！
## 1.INDIRECT関数の機能と使い方
では始めにINDIRECT関数とはどんなものなのか、どんなことに利用できるのかについてみてみましょう。
### 1-1.INDIRECT関数とは？
INDIRECT関数は、「指定される文字列への参照を返す」関数です。
エクセルに表示される説明文をそのまま載せてみましたが、これだけだとさっぱり訳が分からないですよね。
では具体的な例で確認してみましょう。
次の表を見てください。
セルD5には「=INDIRECT(D2)」と入力しており、結果「田中」と表示されています。
流れとしては次の通りです。
- セルD2を参照
- セルD2に入力されている「A2」を参照
- セルA2に入力されている「田中」が表示
次にセルD2の値を「B4」に変えると次のようになります。
つまり、INDIRECT関数を使えばセルの値を変えることで簡単に参照先を変更することができる、ということです。
### 1-2.どんなことに利用できるか？
では具体的にどんなことに役立つのでしょうか？いくつか例を見てみましょう。
#### 1-2-1.集計範囲を変える
例えば集計範囲を変えることができます。
上の表ではSUM関数とINDIRECT関数を組み合わせてセルE5に「=SUM(INDIRECT(E2))」と入力し、セルE2には「B2:B7」と入力しています。
その結果セルE5には数学の点数の合計が表示されました。
次にセルE2の値を「C2:C7」に変えてみましょう。
すると今度は英語の点数が合計されました。
このように、SUM関数とINDIRECT関数を使えば集計範囲を簡単に変えることができます。
#### 1-2-2.参照先のシートを変える
次に参照するシートも変えることができます。
例えばシート「A」のセルB２は「このシートの名前は『A』です」という文章を、シート「D」のセルB2には「シート名は『D』だ！」という文章を入れているとします。
その上でさらに別のシートのセルA2には参照したいシート名として「A」を、セルA4には「=INDIRECT(A2&"!B2")」と入力すると、数式の結果はシート「A」のセルB2の値を表示してくれます。
そしてセルA2の値を「D」に変えると、シート「D」のセルB2の値を表示してくれます。
このようにINDIRECT関数はセルだけでなくシートも切り替えることができるのです。
## 2.INDIRECT関数を使った応用テクニック３選！
では次に、もっと実用的に便利に使えるテクニックを紹介します。
### 2-1.別シートを動的に参照する
先ほど「参照先のシートも変えられる」という説明をしました。
しかし参照先が手入力では誤って入力してしまいかねません。
そこで合わせて使うと便利なのが「ドロップダウンリスト」です。
この機能を使えば文字を入力することなく切り替えられ、入力間違いもなくなります。
では先ほどの例を使って実際にやってみましょう。
（１）参照先を入れるセルを選択し、「データ」タブにある「データの入力規則」ボタンをクリックする
（２）入力値の種類を「リスト」にし、元の値に「,（半角カンマ）」で区切って「A,D」と入力する
（３）完了
これでセルをクリックすればドロップダウンリストが出てくるようになります。
入力間違いを防ぐことができるので、ぜひ活用してみてください。
### 2-2.別ファイルのデータを動的に参照する
INDIRECT関数は、閉じている別ファイルのデータは参照できません。
参照させたい場合にはそのファイルを開いてあげる必要があります。
しかし「ファイル自体の切り替え」ではなく「同一ファイル内のシートや参照先の切り替え」であればできます。
ここでは上の表をSheet1に入れたファイルを「book1」という名前で保存し、book2に数学の合計点と英語の合計点を切り替えて表示できるようにします。
ではやってみましょう。
（１）book2に作業用シートを準備し、そのシートのセルA1に「=[Book1.xlsx]Sheet1!A1」と入力する
（２）元の表と同じ範囲に数式をコピーする
（３）「ホーム」タブにある「罫線」で「格子」を選択する
（４）book2のSheet1に「参照範囲」と「合計値」を表示させるセルを準備する
（５）参照範囲を入力するセルを選択し、「データ」タブにある「データの入力規則」ボタンをクリックする
（６）「入力値の種類」で「リスト」を選択し、「元の値」に「B2:B7,C2:C7」（手順（２）で数式を入力した範囲の内、合計したい範囲を「,（カンマ）」で区切る）と入力する
（７）合計を表示したいセルに「=SUM(INDIRECT("Sheet2!"&A2))」と入力する
（８）セルA2をクリックし、参照範囲を選択すれば完了
このようにすれば、別ファイルの値もINDIRECT関数で切り替えることができます。
ちなみに、データの元になっているbook1Sheet1の表の値を変えてもbook2の値は自動で更新されます。
覚えておくと便利ですよ。
### 2-3.VLOOKUP関数と組み合わせて範囲を動的に参照する
最後にINDIRECT関数をVLOOKUP関数と組み合わせて、参照範囲を切り替える方法について解説します。
具体的には上の表のように、種類と氏名を選択することで、結果を切り替えて表示させる方法ということです。
「種類」を中間、「氏名」を田中と選択すれば「95」が表示され、「種類」を「期末」、「氏名」を伊藤と選択すれば「81」が表示されるようになります。
いちいち自分で探さなくて済むようになり、とても便利です。では作り方を確認してみましょう。
（１）「種類」、「氏名」、「結果」用の欄を準備する
（２）「種類」を入力するセルを選択し、「データ」タブにある「データの入力規則」ボタンをクリックする
（３）「入力値の種類」で「リスト」を選択し、「元の値」に「中間,期末」（各表に対して任意に決めたタイトルを「,（カンマ）」で区切る）と入力する
（４）「氏名」も同じようにリスト化する
（５）１つ目の表を範囲選択し、左上の「名前ボックス（矢印）」に「中間（（３）で入力した任意の名前）」と入力しEnterを押す
（６）もう片方も同様にし、「期末」と入力しEnterを押す
（７）「結果」を表示させるセルを選択し、「=VLOOKUP(B2,INDIRECT(B1),2,FALSE)」と入力する
（８）「種類」と「氏名」を選択すれば完了
このようにすれば後は簡単に、表示を切り替えることができます。
この方法のポイントは特に（５）、（６）の「範囲に名前を付ける」所で、先に解説した「範囲の切り替え」をこの方法で行うこともできます。
## 3.まとめ
以上INDIRECT関数の機能と使い方の解説と、INDIRECT関数を使った応用テクニックを３つ紹介しました。
INDIRECT関数は分かりづらいですが、使いこなせるようになると他の関数や機能と組み合わせることで便利さが格段にアップします。
是非INDIRECT関数でできることをここで紹介した記事から確認し、使いこなせるようになってください。