トップ > 汎用コード > アクティブブックの全シートを一括出力

アクティブブックの全シートを一括出力全シート出力   2023.06.24

アクティブブックの全ワークシートを、それぞれ別のブックとして出力(保存)するマクロです。
別のブックとして保存するタイミングで数式を値に変換します。シートが保護されていると数式を値に変換できませんので、予めシートの保護は解除しておいてください。
また、出力先に同名のファイルがある場合は上書きしますので気を付けてください。

[値を変更しながら連続シート出力]はこちら
[複数のブックを一括統合]はこちら

【サンプルコード実行動画】 ※次の動画の氏名や住所はすべてダミーデータです


【お薦め】マクロ・プロシージャを管理する無料のツール!
 Excelマクロ管理ツール

サンプルコード2023.06.24

コードの貼り付け場所

'-----------------------------------------------------------------------------
' アクティブブックの全シートを別ブックとして出力
'-----------------------------------------------------------------------------
' アクティブブックの全ワークシートを、それぞれ別のブックとして出力するマクロです。
' 別のブックとして保存する際に数式を値に変換します。シートが保護されていると
' 数式を値に変換できませんので、予めシートの保護は解除しておいてください。
' また、出力先に同名のファイルがある場合は上書きしますので気を付けてください。
'[作成日]2023.06.24
' https://excel.syogyoumujou.com/vba/output_all_sheets.html
'-----------------------------------------------------------------------------
Sub OutputAllSheets()

    '定数
    Const C_FILENAME As String = "Sample" '出力ファイルの基準名

    'フォルダの選択
    MsgBox "出力先のフォルダを選択してください", vbInformation
    Dim strFolderPath As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show Then
            strFolderPath = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    
    'フォルダ参照に区切り文字追加
    strFolderPath = strFolderPath & Application.PathSeparator
    
    '画面更新停止・メッセージ非表示設定
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Dim AWB        As Workbook
    Dim NWB        As Workbook
    Dim Sh         As Worksheet
    Dim c          As Long
    Dim bolProtect As Boolean
    
    Set AWB = ActiveWorkbook
    
    For Each Sh In AWB.Worksheets
        c = c + 1
        
        '新規ブックにシートをコピー
        Sh.Copy
        
        '新規ブックを変数に設定
        Set NWB = ActiveWorkbook
        
        'シートが保護されていなければ数式を値に変換
        With NWB.Worksheets(1)
            If .ProtectContents Then
                bolProtect = True
            Else
                .UsedRange.Value = .UsedRange.Value
            End If
        End With
        
        '基準名+番号をファイル名として新規ブックを保存
        NWB.SaveAs strFolderPath & C_FILENAME & Format$(c, "000") & ".xlsx"
        
        '新規ブックを閉じる
        NWB.Close
    Next
    
    '画面更新設定・メッセージ表示設定
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    If bolProtect Then
        MsgBox "保護されているシートがありました" & vbLf & _
               "そのシートは数式を値に変換できていません", _
               vbExclamation
    End If

    'フォルダを開く
    Call Shell("C:\Windows\Explorer.exe " & strFolderPath, vbNormalFocus)
    
End Sub

ファイル名を変更する場合は定数を変更してください。
・「出力ファイル基準名」 出力するファイル名の基準です。ファイル名は「基準名+番号」です。


【書籍紹介】知りたいがすぐわかる! やりたいがすぐできる!
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」(Kindle版)
ユーザーフォームを扱えると、VBAでできることが大きく広がります!
本書では、知りたいこと、やりたいことから、逆引きで学びを深められます。
140以上のサンプルファイル付き!



ページトップへ戻る

Excel 汎用コード

Copyright(C) 2009- 坂江 保 All Rights Reserved.