ブック内すべてのワークシートをブック独立させる方法


Excel VBAあらかると

 Vol-8 「複数のブックを1つのブックに「まとめた〜い!」方法」 の逆ケースです。
ブック内に存在する全てのワークシートを独立したブックでセパレートする方法が Vol-9 の説明になります。
作表する場合にワークシートをたくさん作りすぎて動作が悪化したり、そんな経験がありませんか?
そんな時にVol-9は役に立つと思います。

Vol-8とVol-9は、Vol-6で説明する 「Personal.xls」 にカタログすると使いたいときに指定できるので重宝するかも知れません。但し、フォルダーをデフォルトで指定していますのでカレントフォルダーを自動で認識できるような仕組みが必要です。


 シナリオ  (仕様書)
@ ワークシートのセパレートは、Vol-8で処理したブックを使用します。ブック名は「ワークシート分離.xls」で用意しています。

A 実行のため用意したワークシート「main」はブック独立から除外します。

B 同名ブックが存在する場合(2回以上実行)は上書きを行う。

C 実行フォルダーは、Vol-9同様  C:¥売上実績 とします。

以上の条件を基本にプログラムします。


 実行画面
実行は、ブック名「ワークシート分離.xls」シート名「main」の分離ボタンをクリックします。


 マクロコード
 標準モジュールへ記述
Sub separate()
'ブック内のワークシートの独立

'実行の確認
If MsgBox("ブック内シートの分離処理を実行します。", vbYesNo + vbQuestion, "Mambow") = vbNo Then
  MsgBox ("処理を中断します。")
  Exit Sub
End If

'画面更新の無効化
Application.ScreenUpdating = False

'警告等メッセージの表示を無効化
Application.DisplayAlerts = False

'ブック内のシート数ループ Sheets.Count  i=2 シート「main」の次からを指します。
For i = 2 To Sheets.Count

' シート名を変数 snam へ代入
  snam = Sheets(i).Name

' 次の構文は新規にワークブックを作成し対象シートをコピーします。
  Sheets(i).Copy

  With ActiveWorkbook
'   独立させたワークシートをシート名で保存します。
    .SaveAs "C:\売上実績\" & snam & ".xls"
'   保存したブックを閉じます。
    .Close SaveChanges:=True
  End With

Next i

'警告等メッセージの表示を有効化
Application.DisplayAlerts = True

'画面更新を有効化
Application.ScreenUpdating = True

End Sub
※ ブックの独立は、ワークシートの一括コピーで対応しているのでセル値のみを複写したい場合はもう少し工夫が必要です。

 お試し版ダウンロード 

○Download file: excv090.lhz

○圧縮ファイルの内容: 実行ブック  ワークシート分離.xls

○解凍後、フォルダー  C:¥売上実績  を作成し解凍したブックを複写します。

○実行方法:  ワークシート分離.xlsを起動し「分離」ボタンをクリックします。