【保存先を指定するだけ】シートをPDF一括出力するVBA

毎月のPDF出力、手作業だとつらくないですか?

月末になると、何枚ものシートを 1つずつPDFに保存する作業 に追われていませんか?

  • 毎月の帳票をPDF化するのがとにかく面倒
  • 「名前を付けて保存」を何度も繰り返す
  • 保存先を間違えて、探すのに時間がかかる

こうした“よくある悩み”は、ExcelのVBAを使えば たった1クリック で解消できます。

「保存先フォルダを選ぶだけ」で、複数のシートを自動でPDF化する仕組みを作ってみましょう。


手作業でPDF化するときの問題点

1シートずつ「名前を付けて保存」を繰り返す負担

PDF化は地味ですが、意外と時間を使います。

保存先指定ミス・ファイル名のばらつき

担当者ごとに保存名がバラバラになり、後で探すのが大変になることも…。

忙しい月末に時間を奪われる

本来すべき“判断業務”ではなく、“作業”に時間が奪われてしまいます。


VBAで一括PDF化するとこうなる

  • 保存先フォルダを選ぶだけでPDFが自動保存
  • 複数シートを 順番にまとめて一括出力
  • ファイル名も自動で統一でき、ミスが激減

月末のストレスが一気に減り、本来の業務に集中できます。


事前準備:VBAを動かす前に必要なもの

  1. マクロ有効ブック(.xlsm)で保存する
  2. PDF保存用のフォルダを作成しておく
  3. 各シートの印刷範囲・ページ設定を確認しておく
    • 印刷設定が崩れていると、余白だらけのPDFが出ます。

【コピペOK】複数シートをPDF一括出力する基本VBA

コードの概要(初心者向け解説)

  • 実行すると「保存先を選ぶダイアログ」が開く
  • アクティブブック内の すべてのシート を1枚ずつPDF化
  • PDF名は「シート名.pdf」
  • 保存先のフォルダが1つ決まれば、あとは自動で実行されます

コピペ用コード(基本版)

Sub ExportSheetsToPDF()

    Dim ws As Worksheet
    Dim folderPath As String
    
    '保存先フォルダを選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "PDFの保存先フォルダを選んでください"
        If .Show = -1 Then
            folderPath = .SelectedItems(1) & "\"
        Else
            MsgBox "処理をキャンセルしました。"
            Exit Sub
        End If
    End With
    
    '各シートをPDF保存
    For Each ws In ThisWorkbook.Worksheets
        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=folderPath & ws.Name & ".pdf", _
            Quality:=xlQualityStandard
    Next ws
    
    MsgBox "PDF出力が完了しました!"

End Sub

応用版:さらに便利にするPDF出力VBA

① 特定シートだけPDF化する

「請求書だけ」「レポートだけ」など、必要なシートだけ出力したい場合。

Sub ExportSelectedSheets()

    Dim targetSheets As Variant
    Dim s As Variant
    Dim folderPath As String

    '出力したいシート名を配列で指定
    targetSheets = Array("請求書", "売上サマリー")

    '保存先の選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            folderPath = .SelectedItems(1) & "\"
        Else
            Exit Sub
        End If
    End With

    '指定シートを順番にPDF化
    For Each s In targetSheets
        Worksheets(s).ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=folderPath & s & ".pdf"
    Next s

    MsgBox "指定シートのPDF出力が完了しました!"

End Sub

② ファイル名に「日付」や「シート名」を自動で付与する

毎月の帳票に便利な「日付入りPDF」。

Sub ExportSheetsWithDate()

    Dim ws As Worksheet
    Dim folderPath As String
    Dim fileName As String
    Dim todayStr As String

    todayStr = Format(Date, "yyyy-mm-dd") '日付を文字列化

    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            folderPath = .SelectedItems(1) & "\"
        Else
            Exit Sub
        End If
    End With

    For Each ws In ThisWorkbook.Worksheets
        fileName = todayStr & "_" & ws.Name & ".pdf"

        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=folderPath & fileName
    Next ws

    MsgBox "日付入りPDFの出力が完了しました!"

End Sub

よくあるつまづきポイントと対処法

● パス指定エラー

  • 保存先フォルダが存在しない
  • ネットワークフォルダの接続が切れている

→ フォルダを再作成 or ネットワーク再接続を確認してください。


● 印刷範囲が設定されておらず、真っ白PDFになる

  • 印刷範囲設定(PageSetup)が空の場合に起きる現象
    → 手動で印刷プレビューを確認して、印刷範囲を再設定してください。

● シート名に使えない文字があり、PDF保存に失敗する

Windowsでは \ / : * ? " < > | はファイル名に使えません。

→ シート名を変更する or Replace関数で除去するコード処理が必要です。


まとめ:毎月のPDF作業はVBAで“ワンクリック化”できます

  • 面倒だったPDF化が一気に自動化
  • 保存先を選ぶだけで、複数シートが自動でPDF出力
  • 他の帳票でも同じ仕組みをそのまま使い回せる

作業時間を毎月10〜20分でも削減できれば、1年で大きな差になります。

もし「自社フォーマットに合わせた自動PDF化をしたい」「もっと複雑な帳票にも対応したい」などあれば、やさしくカスタマイズをお手伝いしますので、お気軽にご相談ください。

月10h削減!定型作業を1クリック化します 単調作業はVBA任せ!秒速で時短

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です