らくらくIT活用術

PC活用講座 - Excel

「Excelの便利機能活用術」
複数のシートに入力されたデータを1つのシートにまとめるには

ITライター 立山秀利

複数のシートに入力されたデータを1つのシートに集約したい場合、セルのデータを連携させる「=シート名!セル番地」の形式で数式を入力することになる。その際、シートの数が多いと数式の入力が大変だ。今回はINDIRECT関数を利用して、数式入力を簡単に済ませるワザを紹介する。

関数を使わなくてもシート名が違うセル参照はできるが…

例えば図1~3のように、3種類の商品の売上データが渋谷店と新宿店と池袋店それぞれ別シートに入力され、各商品の売上合計がB14~D14セルに求めてあるとする。ワークシート名は店舗名とする。

図

図1

図

図2

図

図3

これら3つのシートにある各店舗の各商品の売上合計を、図4のような体裁のシート「集計」に集約したいとする。A2~A4セルには店舗名、B1~D1には商品名が入力され、B2~D4セルには該当する売上合計を入力したいとする。

その際、例えば渋谷店のAコースの売上合計であるB2セルには、「=渋谷店!B14」という数式を入力すれば、シート「渋谷店」のB14セルと連携(参照)して、そのデータが取得できる。

図

図4

このシート「集計」のB2セルの数式「=渋谷店!B14」自体は誤りではなく、目的のとおりシート「渋谷店」のB14セルのデータが得られる。同様に、シート「集計」のB3セルに新宿店の売上合計のデータを取得するには「=新宿店!B14」、B4セルに池袋店の売上合計のデータを取得するには「=池袋店!B14」と入力すればよいのだが、その都度シート名(店舗名)を「!」の前に手入力せねばならず面倒だ。もし店舗の数が増えた場合、大きな手間と時間を費やすことになるだろう。

INDIRECT関数ならシート名を入力しなくても別シートのセルが参照可能

そこでINDIRECT関数を利用すれば、その都度シート名(店舗名)を「!」の前に手入力する手間をなくすことができる。

INDIRECT関数は引数に指定した文字列のセル参照を返す関数である。例えば「=INDIRECT("A1")」と引数に文字列「A1」を指定すると、A1セルの参照を返す。つまり、「=A1」という数式を記述したのと同じ結果が得られる。

このような使い方ならわざわざINDIRECT関数を使う必要がない。同関数が威力を発揮するのは、引数の文字列を何かしらの演算子を使うなどして組み立てた場合だ。その実例を今回のサンプルを用いて解説しよう。

図4ではシート「集計」のB2セルに「=渋谷店!B14」という数式を入力している。INDIRECT関数で同じ結果を得るには、「渋谷店!B14」を文字列として引数に指定し、「=INDIRECT("渋谷店!B14")」とすればよいことになる。

ここで、シート「集計」のA2セルに店舗名として「渋谷店」と入力されていることを利用する。「=INDIRECT("渋谷店!B14")」の引数に指定している「渋谷店」の部分を、そのA2セルを用いるよう数式を変更する。その数式は以下になる。

---------------------
=INDIRECT(A2&"!B14")
---------------------

INDIRECT関数の引数は「A2&"!B14"」と指定している。&は文字列を連結する演算子だ。A2セルの値(文字列「渋谷店」)と文字列「!B14」を連結することになり、「渋谷店!B14」という目的の文字列が得られる。よって、シート「渋谷店」のB14セルへの参照が返され、そのデータが得られる(図5)。

図

図5

そして、シート「集計」のB3セルの新宿店、B4セルの池袋店の売上合計は、先ほどのB2セルをオートフィルで入力すれば、「=INDIRECT(A2&"!B14")」のA2の部分がA3、A4と自動で変化するため、目的のシート名が指定された数式になり、目的のデータが取得できる(図6)。

図

図6

このようにINDIRECT関数によって、A3~A4セルはその都度シート名(店舗名)を「!」の前に手入力しなくとも、オートフィル一発で入力できるようになる。このサンプルでは店舗数が3つなので効果はいまひとつだが、店舗数が何十にものぼるケースなら、入力の手間と時間を大幅に削減できるだろう。

シート「集計」のBコースの売上合計(C2~C4セル)、Cコースの売上合計(D2~D4セル)も同様にINDIRECT関数を利用する。A2~A4セルの数式をオートフィルで入力したいところだが、残念ながら「=INDIRECT(A2&"!B14")」の「"!B14"」の部分は文字列であるためオートフィルで自動変化しない。

そのため、C2セルには「=INDIRECT(A2&"!C14")」、D2セルには「=INDIRECT(A2&"!D14")」と手入力し、以降の行をオートフィルで入力することになる(図7)。C2セルとD2セルのみ手入力となるが、それでも以降の行はオートフィルで入力できるため効率的だ。

図

図7

このようにINDIRECT関数を利用すれば、シート名の部分を手入力せずに、オートフィルでまとめて入力可能となるため作業を効率化できる。

その他の【Excel】を見る

PC活用講座 一覧へ

立山秀利(たてやま・ひでとし)

カーナビのソフトウェア開発、Webプロデュース業務を経て、現在は、システムやネットワーク、Microsoft Officeを中心に執筆中。 主な著書に『Excel VBAのプログラミングのツボとコツがゼッタイにわかる本』などがある。

(監修:日経BPコンサルティング)