Excel関数で別シートのセルを指定する INDIRECT関数を使うと簡単に別シートのセルを指定することができます

Excelで関数を使う時には、別シートのセルを指定することもよくあります。シート内のセルの時と少し勝手が違うので、注意すべき点をおさえておきましょう。

スポンサーリンク

Excel上のセル指定のルール

Excelで関数を使う時に入力するデータには、「数値」「文字データ」の他に、 
「A1」「B5」など、セルの場所を指定する「セル番地」があります。

 
「セル番地」を指定すると言うことは、

 
「指定されたセルのデータを使いなさい」という指示を出していることになります。

 
たとえば、このような表があるとします。

 

 
赤で囲ったセルに、SUM関数で得票数の合計を表示することを考えます。

 
SUM関数は、指定したセルの数値を合計する関数ですから、

 

 
このようにセル番号を指定すれば、

 
「D3セルからD14セルまでのデータを使いなさい」

 
という指示になって、正しく合計してくれます。

 
確かに、これでセル番地は正しく指定できているのですが、 
実は、普段、当たり前のように使っている、「D3」や「D14」のような、セル番地だけを入力する方法には、 
ある情報が省略されていることを覚えておく必要があります。

 
もともと、Excel上でセル番地を指定するためには、セル以外に2つの情報が必要です。

 
1つは、ブック 
もう1つが、シート

 
です。

 


(ブックとは、この「ファイル」のことを指します。)

 
なぜ、セル以外の情報として、上の2つが必要になるかというと、 
Excelは、その重要な仕組みとして「階層構造」を持っているからです。

 
「階層構造」というのは、Excelの中で場所を示す時には、 
大きな単位から順番に指定しなければいけない、というルールのこと。

 
具体的には、

 
ブック → シート → セル

 
の順番で指定します。

 
つまり、「セルを指定する」場合には、 
その前に「ブック((例)book1、book2など)」「シート((例)sheet1、sheet2など)」を指定するのが、本来のルールなのです。

 
では、なぜ、「D3」や「D14」のように、セル番地だけを入力しても、正しく指定できるかというと、特に指定が無ければ、

 
今、開いているブックの、 
今、開いているシートが、 

 
自動的に指定されているからです。

 

 
Excelでセル指定する時は、ブック、シート、の指定が必要 
ブック、シートの指定がなければ、「今開いているブック&シート」が自動的に指定される

 

 
この2点を理解しておけば、セルの指定がスムーズになります。

 
これを踏まえて、関数の中で、別シートのセルを指定する方法を考えます。

 

 

別シートのセルを指定する方法

先ほどの表を、別シートで集計することを考えます。

 
4つのシートがあって、

 

 
「201503」以下のシートには、

 

 
このような表が作成され(形は全て同じ。数字だけ異なります)、

 
Summaryシートで、

 

 
SUM関数を使い、「201503」、「201502」、「201501」シートの得票数の合計をもとめます。

 
ポイントはシートの指定の仕方です。 
「201503」シートを指定します。

 
SUM関数が入力されているセルを見て下さい。

 

 
ご覧の通り、

 
’ ’」(クォーテーションマーク)で、「シート名」を囲み

 
「!」(エクスクラメーション)で、セル番地とつなぐ、

 
ことで、シートを指定できることが分かりました。

 
実際に、指定したいセルをドラッグすれば、シート名も含めて指定できるのですが、

 
「シート名の指定方法」として、何を、どのように入力するかは、 知っておくべきです。

 
次に説明する、より簡単な方法で、別シートのセルを指定する時に役立ちます。

 

 

INDIRECT関数を使って、簡単に別シートを指定する

別シートのセルを指定する際の、シートの指定方法を見てきました。

 
入力方法はわかりましたが、いちいちシート名を入力する方法は、面倒ですし、

 
指定するシートのセルに移動してドラッグするのも、シート数が増えると、やはり、面倒です。

 

 
そこで、シート数が増えた場合にでも、簡単にシートを指定できる方法を考えます。

 
INDIRECT関数を使う方法です。

 
最初に、INDIRECT関数を使って入力する際のポイントを押さえておきます。

 
・INDIRECT関数でシートとセルのデータをまとめて指定する。 
 =SUM(INDIRECT(D2!$D$3:$D$14))

 
・セルを「” ”」で囲んで文字データにして、 
 シートのデータと「&」でつなぐ 
 =SUM(INDIRECT(D2&”!$D$3:$D$14“))

 
この2点です。 
順番に説明します。

 
INDIRECT関数はセルに入力された「シート名」や「セル番号」を 
Excel上の場所を示す、シート名やセル番号に変換してくれる関数です。

 
たとえば、C2セルに「B2」と入力したとします。

 

 
すぐ下のC3セルに、「=C2」と入力して、

 

 
「C2セルのデータを使う」ように指定すると、

 

 
C2セルに入力された「B2」を表示します。

 
ところが、INDIRECT関数でC2セルを指定すると、

 

 
C2に入力されたデータ”B2”は、「B2」というデータから、

 
シート名やセル番号などのExcel上の”場所”を表すデータに変換されますから、

 

 
「B2セルのデータを使いなさい」という指示に変わります。

 

 
その結果、B2に入力されている「ヴィヴィくん」が表示されます。

 
この、INDIRECT関数を使って、セルに入力されたシート名を、 
関数で指定するシート名として使ってしまいましょう。

 

 
まず、シート名が入力されているセルをINDIRECT関数で指定するところからスタートします。

 
元の式が、
 
=SUM(‘201502’!$D$3:$D$14)

 
ですから、赤字の部分ですね。 
ここを、INDIRECT関数で指定します。

 

 
これで良さそうですが、このままでは、INDIRECT関数で指定した「シート」と

 
「$D$3:$D$14」で入力された「セル」とが、バラバラになって、 
「$D$3:$D$14」は単独で入力されていることになってしまいます。

 
つまり、シートは「201502」が指定されているのに、 
セルは、「今開いているシート(=Summaryシート)」のセル 
を指定することになってしまうので、正しくセルが指定できていないことになるのです。

 
そこで、修正を加えます。 
「シート」だけでなく、「セル」まで含めた、ひとまとまりを、INDIRECT関数で指定します。

 

 
=SUM(INDIRECT(D2!$D$3:$D$14))

 
こうなりました。

 
これで上手くいきそうですが、もうひとつ。

 
ひとまとまりにしたのは良いのですが、今度はINDIRECT関数の中が整理できていません。

 
「シート」!「セル」

 
のつなぎ方では、INDIRECT関数の方が正しく認識できないのです。

 
そこで、「セル」の方を、「” ”」(ダブルクォーテーション)で、文字データにして、

 
「シート」との間を「&」でつなぐことで、

 
「シート」と「セル」を指定したデータであることを、INDIRECT関数に認識させます。

 

 
=SUM(INDIRECT(D2&”!$D$3:$D$14″))

こうなりました。

 
最後に、もう一度まとめると、

 
・INDIRECT関数でシートとセルのデータをまとめて指定する。 
 =SUM(INDIRECT(D2!$D$3:$D$14))

 
・セルを「” ”」で囲んで文字データにして、 
 シートのデータと「&」でつなぐ 
 =SUM(INDIRECT(D2&”!$D$3:$D$14“))

 
これでOKです。

 
このように指定できれば、

 

 
数式をコピーするだけでシート名が、上にあるセルのデータ(201501)に変わるので、いちいちシート名を入力する必要がなくなります。

 
シートが、何10枚増えても、コピーするだけで、シート名の入力ができるのです。

 

 

まとめ

Excel上の場所を指示する時の基本的なルール、「階層構造」をおさえておきましょう。 
その上で、INDIRECT関数を使えば、別シートのセルの指定がスムーズになります。
 
<おまけ>
今回触れた、Excelの「階層構造」は、マクロでも重要な考え方ですので、覚えておいて損はありません。