前回までに、同じフォルダーに入っている複数のブックから特定の名前のシートを全部取り込むためのマクロを完成させました。今回は、大量に取り込んだシートから、指定したセルのデータを一覧するためのマクロを作りました。複数のシートにある特定のセルのデータを、1枚のシート上に並べて表示できます。

 図1が、ほかのブックから取り込んだシートの例です。C7~E7セルに小計の値が入っています。これら小計の値をすべてのシートから取り出して、一覧できるようにしましょう。

図1 複数のシートから小計の値だけを取り出して一覧したい
図1 複数のシートから小計の値だけを取り出して一覧したい
[画像のクリックで拡大表示]

 図2が今回作成した「一覧」シートです。3行目に、各シートから取り出したいセルのアドレス(セル番地)を書き込みます。この例ではC7、D7、E7です。2行目には何のデータかが分かるように項目名を書き込んでおきます。

図2 項目名とセルアドレスを指定して「データ一覧を作成」ボタンを押す
図2 項目名とセルアドレスを指定して「データ一覧を作成」ボタンを押す

 この状態で「データ一覧を作成」ボタンを押してください。すると「一覧」シートよりも右側にあるシートから、そのシート名と、指定したセルアドレスのデータを取り込み、一覧できるようになります(図3)。

図3 「一覧」シートより右側にあるシートの名前と、3行目に指定したセルアドレスのデータを取り出して表示する
図3 「一覧」シートより右側にあるシートの名前と、3行目に指定したセルアドレスのデータを取り出して表示する
[画像のクリックで拡大表示]

 取り込むシートの枚数はメモリーが許す限りいくらでも可能です。一覧する項目(セルアドレス)の数も、ワークシートの横幅いっぱいまで増やせます。ただし、シートの枚数や項目の数が多くなると、動作が遅くなり、時間が掛かりますのでご注意ください。

 また、罫線を引くのは手動です。シートの枚数や項目の数に応じて罫線を追加して、見やすくしてください。

同じ式を入れるだけ

 マクロを使うのですから、取り込んだシートから「一覧」シート上にデータをコピーすることは簡単にできます。しかし、今回のマクロではデータをコピーせずに、図3に示した数式を各セルに書き込むことにしました。

 INDIRECT関数を使って、図3のA列に示したシート上の、3行目で指定したセルのデータを表示しています。ですから、マクロを実行した後で、各シートの値を変更しても大丈夫です。「一覧」シート上の表示も更新されます。

 こうした複数のシートからデータを集めようとすると、すべてのシートの体裁が同じでなければなりません。実際には大量のシートを扱っていると、中には余分な行や列が挿入されているシートも出てきます。その場合は正しいデータが表示できません。

 個別のシートをチェックしないまま串刺し計算をしてしまうとデタラメな結果になってしまいます。今回のマクロなら、各シートが想定通りの形式になっているかどうかも調べられます。

 例えば、図1のB3セルが「項目」、B7セルが「小計」になっているかどうかなどをこのマクロで調べれば、取り込みたいシートの形式が統一されているかどうかのチェックができます。

サンプルファイルの公開は終了しました。