VBAでブックの各シートをそれぞれ新規ブックで保存する

ブックの全シートをそれぞれ別の新規ブックに分ける

1つのブックの中にたくさんのシートがある場合がありますが、あまりに多すぎて探すのが大変な場合があります。

そういう場合はいっそのこと各シートを別のブックを分けてしまった方が都合がよくなることが多々あります。

以下では指定したブックの全シートをそれぞれ新規ブックに保存するマクロを紹介します。

ブックの全シートを新規ブックで作成するマクロ

引数にブックのフルパスを指定すると、そのブックと同じフォルダに全シートをひとつずつ新しいブックで保存します。

引数のブックはそのまま残ります。

作成するブックの名前は3桁の連番とシート名になります。



コード説明

引数のブックを別プロセスのExcelで開いています。内部的にExcelオブジェクトを利用しているため引数のブックは非表示で起動された状態になります。

警告ダイアログを非表示にしていますが、これはあまり使うことは無いと思いますがExcel 4.0 マクロシートを使っている場合の対応です。

拡張子を固定でxlsxにしていることが警告ダイアログに引っかかります。それを防ぐための警告ダイアログを非表示にしています。

また、ループ内でシートの表示状態を標準状態にしています。これは非表示シートを新規ブックに保存するためです。非表示のままではエラーになります。

その他はコメントの通りです。

使い方

上の関数の利用サンプルです。シートを分解したいブックのフルパスを関数に渡します。

実行結果

Excelで作成できるシートには「ワークシート」「グラフ」「Excel 4.0 マクロ」「MS Excel 5.0 ダイアログ」の4種類があります。

サンプルのBook2.xlsmにはそれらの4種類のシートと非表示にしているワークシートのがあります。

1. ブックを用意します。ここではBook2.xlsmです。

2. 上で紹介しているSheetToBook関数を実行します。

3. Book2.xlsmと同じフォルダに各シートが新しいブックで保存されます。

注意点

このマクロには注意点があります。それは途中で止まったように見えることがある点です。

新規ブックの保存が連続して行われるとVBAの処理が止まったようになることがあります。時間にして1分程度です。

実際には止まってないのでしばらく待ってみてください。一応完了ダイアログを出すようにはしているのでそれを待ってみてください。

関連記事

サブコンテンツ

このページの先頭へ