📊 Excel VBA Top100
⚡

CreatePDFExport

自動化

アクティブシートをPDFとしてエクスポートします

アクティブシートまたは選択したシートをPDF形式でエクスポートするマクロです。ExcelファイルをPDFに変換する操作をワンクリックで実行でき、保存先・ファイル名・印刷品質などの設定もマクロに組み込めます。月次報告書の最終版PDF化・請求書の自動PDF作成・定期配信用PDF生成など、繰り返し行うPDF出力作業の自動化に役立ちます。元のExcelファイルは変更されません。内部ではWorksheet.ExportAsFixedFormatメソッドをType:=xlTypePDFで呼び出しており、印刷設定(用紙サイズ・向き・印刷範囲)がそのままPDFのレイアウトに反映されます。SendEmailWithAttachmentと組み合わせれば、PDF化からメール送信までの一連の配信フローを完全に自動化できます。

CreatePDFExport デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: CreatePDFExport を実行すると、現在のシートがPDFとして保存されます

🎯 活用シーン

  • ✓毎月の請求書をExcelで作成した後、自動的にPDF化して保存する処理を自動化して、手動でのPDF変換作業をなくしたいとき
  • ✓週次報告書の最終シートをPDFに変換して配信するフローを自動化し、報告書作成から配布までの時間を短縮したいとき
  • ✓複数の見積書シートを一括でPDF化して、ファイル番号ごとにフォルダに保存する自動整理システムを作りたいとき
  • ✓見積書・請求書を作成後に自動でPDF化し、電子帳簿保存法対応のフォルダへ保存したいとき
  • ✓セミナー資料や配布用レポートをExcelで作成し、閲覧用のPDFとして一括変換したいとき

💡 実装のヒント

  • ▸印刷範囲が設定されている場合は、その範囲のみがPDFに出力されます。シート全体を出力したい場合は事前に印刷範囲をクリアしてください。
  • ▸PDF品質は「標準」と「最小サイズ」から選択できます。大きな画像が含まれる場合は最小サイズを選ぶとファイルサイズを抑えられます。
  • ▸複数シートを1つのPDFにまとめる場合は、Worksheets配列で複数シートを選択してからExportAsFixedFormatを実行してください。
  • ▸改ページプレビューで事前にレイアウトを確認しておくと、PDF出力後の見た目の崩れを防げます。
  • ▸複数シートを別々のPDFファイルとして出力したい場合は、シートごとにExportAsFixedFormatをループ実行してください。

💻 VBAコード

' CreatePDFExport
' -----------------
' Macro Name: CreatePDFExport
' Description: アクティブシートをPDFとしてエクスポートします
' Parameters: なし
' Returns: なし
' Usage: CreatePDFExport を実行すると、現在のシートがPDFとして保存されます
' -----------------

Sub CreatePDFExport()
    On Error GoTo ErrorHandler
    
    Dim ws As Worksheet
    Dim pdfPath As String
    Dim fileName As String
    
    Set ws = ActiveSheet
    
    ' PDFファイル名の作成
    fileName = Left(ws.Name, InStrRev(ws.Name, ".") - 1)
    If fileName = ws.Name Then fileName = ws.Name
    pdfPath = ws.Parent.Path & "\" & fileName & ".pdf"
    
    ' PDFとしてエクスポート
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, Quality:=xlQualityStandard
    
    MsgBox "PDFを作成しました:" & vbCrLf & pdfPath, vbInformation, "PDF作成完了"
    
    Exit Sub
    
ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub