前回は、複数のブックに含まれている特定の名前のシートを、全部取り込むマクロを作成しました。ただし、指定した名前のシートを含まないブックを処理しようとするとエラーで停止してしまいます。そこで、指定した名前のシートがなくてもエラーにならないように改良しました。さらに各ブックのシート名も一覧表示しています。

 Excelを使っていると、シート名を変更するのはよくあることです。図1は「旧・集計」「集計2」シートが含まれていますが「集計」シートはありません。今回作成したマクロなら、こんなブックが含まれていても大丈夫です。

図1 「集計」シートがリネームされたり削除されたりしているブックがある
図1 「集計」シートがリネームされたり削除されたりしているブックがある
[画像のクリックで拡大表示]

 使い方は前回作成したものと同じです。図2のシートで「シートの取り込み」ボタンを押します。するとマクロが起動して「ファイルを開く」ダイアログが開きます。取り込みたいファイルを保存してあるフォルダーを表示して、ファイルを1個だけ選択して「開く」ボタンを押してください。すると、同じフォルダーに入っているブックを1つずつ開いてシートを取り込みます。

図2 A1セルに「集計」と入力して「シートの取り込み」ボタンを押す
図2 A1セルに「集計」と入力して「シートの取り込み」ボタンを押す

指定のシートがあれば実行

 前回のマクロでは、開いたブックには指定したシートが必ず含まれていることを前提に、取り込みを実行していました。今回は、まず開いたブック名を「管理」シートのA列に記録します。次にブックに含まれているシート名をC列から右方向に記録していきます。そのブックに、A1セルで指定したシートが含まれている場合にだけ、そのシートを自分のブックの右端に取り込みます。

 実行結果が図3です。「8月分」以外のブックから「集計」シートを取り込んで、元のファイル名を追加したシート名に変更しています。

 「管理」シートにはA列に取り込もうとしたファイル名の一覧が現れます。B列には、指定したシートが存在したかどうかがOK/NGで示され、C列以降には取り込み対象のブックに含まれているすべてのシート名が表示されます。

図3 各ブックの「集計」シートの有無を判定して、あれば取り込む。シートの有無は、2行目以下に現れる判定結果とシート名の一覧で確認できる
図3 各ブックの「集計」シートの有無を判定して、あれば取り込む。シートの有無は、2行目以下に現れる判定結果とシート名の一覧で確認できる
[画像のクリックで拡大表示]

 今回作成したマクロは、Excel 2003形式のブックに入れたものなので、列数には最大256という制限があります。一方、Excel 2003で扱えるシートの数には事実上、制限がありません。そのため、あまりにもシート数の多いブックを取り込もうとすると、エラーで終了してしまいます。

 また前回と同様、Excel 97-2003形式(拡張子はxls)のブックのみに対応しています。取り込みたいブックを入れたフォルダーに、ブック以外のファイルが入っているとエラーになります。

 なお、今回は「シート名だけ」ボタンも付けてあります(図2)。これを押した場合、対象のブックからシート名の一覧を取得して、指定したシートが存在するかどうかだけチェックします。

 このマクロではシートは取り込まないので、比較的高速に動作します。あらかじめ指定した名前のシートがあるかどうかをチェックしておきたい場合や、大量のブックからシート一覧を得たい場合などに、ご活用ください。

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