Excelでは、INDIRECT関数を使うことで複数の同じフォーマットのシートからデータを集計することができます。営業成績表や残業時間管理表など社員ごとに記録しているデータなどを集計する際に役に立ちます。
INDIRECT関数を使って複数シートのデータを集計する方法
INDIRECT関数を使った参照方法
このような同じフォーマットで記録されている売上データの月別の売上合計を1つのシートに集計していきます。

あらかじめ集計するシートには各担当者の名前を書いておき、シート名もこの名前と一致するようにします。

ここではINDIRECT関数を使用し、集計を行います。INDIRECT関数では、参照先を文字列で指定することができる関数で、シート名などを柔軟に変更して参照することができます。
INDIRECT関数 |
---|
指定した文字列をセル参照として解釈し、そのセル参照の値を返す。 |
たとえば、「田中紘一」シートの4月の売上データを参照するには以下のように数式を入力します。
=INDIRECT($A4&”!B7″)

まず、シート名に対応するセルA4を参照します。この際、列固定の複合参照とします。「&」で接続し、「!B7」と記載します。「!」はシート名とセル参照を区切るマークで、B7は4月の売上合計が記載されたセルを表しています。

これらは文字列として認識させるため、ダブルクォーテーションで囲みます。これで、「田中紘一シートのセルB7を参照する」ということを意味します。
これで、616万円と表示されます。

下にコピーすれば、各担当者の4月の売上が表示されます。各担当者のシートは同じフォーマットで作成しているので、セルB7を参照すれば、4月の売上を表示させることができます。

参照範囲を広げる方法
5月以降も同じように集計したいのですが、数式をコピーしても4月の結果が表示されてしまいます。

これは、参照セルは文字列として記載しているため、セルをコピーすると同じセルB7がコピーされてしまうためです。

1つずつ数式を変えてもいいのですが、それも大変なので、参照先のセルの値も別のセルから取得するようにします。月の上の行にB7、C7、D7というように参照先のセルの番号を記載していきます。

そして、数式を以下のようにシート名&エクスクラメーションマーク&セルの番号というように変更します。
=INDIRECT($A5&”!”&B$3)

「!」は文字列として認識させるため、ダブルクォーテーションで囲みます。セルの番号は行方向を固定する形式で選択します。この数式をコピーすると各担当者の各月の売上合計が表示されます。

セル番号の入力を効率化させる方法
なお、このように1つ1つ、セルの番号を書いてもいいのですが、これもデータが多いと時間がかかってしまいます。CHAR関数を使うことで効率化することができます。CHAR関数は指定した文字コードに対応する文字列を返す関数です。たとえば、=CHAR(65)は大文字のA、=CHAR(66)はBという文字を表示させます。これを活用して、B、C、Dという連続したアルファベットを入力します。
アルファベットを表示させたいセルに以下のように数式を入力します。
=CHAR(COLUMN()+64)

COLUMN関数はそのセルの列番号を返す関数で、B列の場合、2という数字を返します。これに64をプラスすれば、=CHAR(66)となり、Bと表示されます。

この数式を右にコピーすれば、B、C、Dという連続したアルファベットを入力できます。

そして下の行にアルファベットと「7」という文字列を組み合わせます。

この数式を右にコピーすれば、B7、C7、D7というようにセル番号を表示できます。

これでINDIRECT関数で参照しているセルも正しく表示されます。
シート名に空白が入っている場合
なお、名前などは姓と名の間に空白が入っている場合がありますが、これでは、INDIRECT関数の参照エラーが出てしまいます。このエラーを解決するには、シート名をシングルクォーテーション (‘) で囲み、空白を含めてシート名全体を一つの文字列として認識させます。
=INDIRECT(“‘“&$A5&”‘!”&B$3)

これで空白が入っているようなシートも正しく参照することができます。
コメント