前回は、複数のブックに含まれている特定の名前のシートを、全部取り込むマクロを作成しました。ただし、指定した名前のシートを含まないブックを処理しようとするとエラーで停止してしまいます。そこで、指定した名前のシートがなくてもエラーにならないように改良しました。さらに各ブックのシート名も一覧表示しています。
Excelを使っていると、シート名を変更するのはよくあることです。図1は「旧・集計」「集計2」シートが含まれていますが「集計」シートはありません。今回作成したマクロなら、こんなブックが含まれていても大丈夫です。
使い方は前回作成したものと同じです。図2のシートで「シートの取り込み」ボタンを押します。するとマクロが起動して「ファイルを開く」ダイアログが開きます。取り込みたいファイルを保存してあるフォルダーを表示して、ファイルを1個だけ選択して「開く」ボタンを押してください。すると、同じフォルダーに入っているブックを1つずつ開いてシートを取り込みます。
指定のシートがあれば実行
前回のマクロでは、開いたブックには指定したシートが必ず含まれていることを前提に、取り込みを実行していました。今回は、まず開いたブック名を「管理」シートのA列に記録します。次にブックに含まれているシート名をC列から右方向に記録していきます。そのブックに、A1セルで指定したシートが含まれている場合にだけ、そのシートを自分のブックの右端に取り込みます。
実行結果が図3です。「8月分」以外のブックから「集計」シートを取り込んで、元のファイル名を追加したシート名に変更しています。
「管理」シートにはA列に取り込もうとしたファイル名の一覧が現れます。B列には、指定したシートが存在したかどうかがOK/NGで示され、C列以降には取り込み対象のブックに含まれているすべてのシート名が表示されます。
今回作成したマクロは、Excel 2003形式のブックに入れたものなので、列数には最大256という制限があります。一方、Excel 2003で扱えるシートの数には事実上、制限がありません。そのため、あまりにもシート数の多いブックを取り込もうとすると、エラーで終了してしまいます。
また前回と同様、Excel 97-2003形式(拡張子はxls)のブックのみに対応しています。取り込みたいブックを入れたフォルダーに、ブック以外のファイルが入っているとエラーになります。
なお、今回は「シート名だけ」ボタンも付けてあります(図2)。これを押した場合、対象のブックからシート名の一覧を取得して、指定したシートが存在するかどうかだけチェックします。
このマクロではシートは取り込まないので、比較的高速に動作します。あらかじめ指定した名前のシートがあるかどうかをチェックしておきたい場合や、大量のブックからシート一覧を得たい場合などに、ご活用ください。