【Excel】VBAでPDF出力を自動化する!ExcelのExportAsFixedFormat活用法

【Excel】VBAでPDF出力を自動化する!ExcelのExportAsFixedFormat活用法
🛡️ 超解決

Excelのレポートや資料をPDF形式で保存する機会は多いでしょう。手作業での保存は、ファイル名の管理や複数シートの出力など、手間がかかります。Excel VBAのExportAsFixedFormatメソッドを活用すれば、これらの作業を自動化できます。この記事では、VBAを使ってPDF出力を自動化する具体的な方法を解説します。Excelの作業効率を劇的に改善できるでしょう。

【要点】VBAでExcelファイルをPDF出力するExportAsFixedFormatメソッドの活用法

  • ExportAsFixedFormatメソッド: ExcelファイルをPDFやXPS形式でエクスポートするVBAメソッドです。
  • 対象の指定: Workbookオブジェクト、Pageオブジェクト、Rangeオブジェクトなど、出力対象を指定できます。
  • オプション設定: 出力するページ範囲、品質、ファイル名、パスなどを細かく設定可能です。

ADVERTISEMENT

ExportAsFixedFormatメソッドの概要と基本

ExportAsFixedFormatメソッドは、Excel VBAから固定形式ファイル(PDFやXPS)へエクスポートする際に使用します。このメソッドを使うことで、手動での「名前を付けて保存」操作を自動化し、作業時間を大幅に短縮できます。また、ファイル名や保存場所、出力内容などをプログラムで制御できるため、ヒューマンエラーの削減にも繋がります。

このメソッドは、様々なオブジェクトに対して使用できます。例えば、ブック全体、特定のシート、あるいは指定したセル範囲を出力対象とすることが可能です。これにより、レポートの一部だけをPDF化したり、複数のシートを個別のPDFファイルとして保存したりといった柔軟な対応ができます。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

ExcelファイルをPDFとして出力する基本的なVBAコード

ここでは、アクティブなExcelブック全体をPDFファイルとして保存する最も基本的なVBAコードを紹介します。このコードは、VBAエディタ(Alt + F11キーで起動)に記述して実行します。

  1. VBAエディタを開く
    ExcelでAlt + F11キーを押してVBAエディタを起動します。
  2. 標準モジュールの挿入
    「挿入」メニューから「標準モジュール」を選択し、新しいモジュールウィンドウを開きます。
  3. コードの記述
    以下のコードをモジュールウィンドウにコピー&ペーストします。
    Sub ExportActiveWorkbookToPDF()
        Dim SavePath As String
        Dim FileName As String
    
        ' 保存するフォルダパスを指定します(例: デスクトップ)
        SavePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
    
        ' 保存するファイル名を指定します(例: ブック名.pdf)
        FileName = ThisWorkbook.Name & ".pdf"
    
        ' アクティブなブックをPDFとしてエクスポートします
        ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
                                       Filename:=SavePath & FileName, _
                                       Quality:=xlQualityStandard, _
                                       IncludeDocProperties:=True, _
                                       IgnorePrintAreas:=False, _
                                       OpenAfterPublish:=True
    
        MsgBox "PDFファイルが " & SavePath & FileName & " に保存されました。", vbInformation
    End Sub
  4. コードの実行
    VBAエディタのコードウィンドウ内でF5キーを押すか、Excelに戻って「開発」タブから「マクロ」を選択し、「ExportActiveWorkbookToPDF」を実行します。

このコードを実行すると、アクティブなブックがPDF形式でデスクトップに保存されます。ファイル名は元のExcelブック名に「.pdf」が付いたものになります。また、`OpenAfterPublish:=True`の設定により、保存後にPDFファイルが自動的に開きます。

ExportAsFixedFormatメソッドの主要な引数解説

ExportAsFixedFormatメソッドには、PDF出力の挙動を細かく制御するための引数が用意されています。これらの引数を理解し、適切に設定することで、より目的に合ったPDFを作成できます。

Type引数:出力形式の指定

Type引数では、エクスポートするファイルの種類を指定します。PDF以外にもXPS形式での出力が可能です。一般的にPDF出力が多いため、ここではPDFを指定する定数について説明します。

  • xlTypePDF: PDF形式でエクスポートします。
  • xlTypeXPS: XPS形式でエクスポートします。

通常は`xlTypePDF`を指定して使用します。

Filename引数:出力ファイル名の指定

Filename引数には、保存するPDFファイルのフルパスとファイル名を文字列で指定します。例えば、「C:\Users\YourName\Documents\Report.pdf」のように指定します。パスを指定しない場合、カレントディレクトリに保存されます。ファイル名に日付や連番を含めることで、管理しやすくなります。

Quality引数:出力品質の指定

Quality引数では、PDFの品質を設定します。これにより、ファイルサイズと画質を調整できます。

  • xlQualityStandard: 標準品質(Web表示や印刷に適した品質)。ファイルサイズは比較的小さくなります。
  • xlQualityMinimum: 最小品質(ファイルサイズを最優先)。画質は低下しますが、ファイルサイズは最も小さくなります。

通常は`xlQualityStandard`を指定します。高画質が必要な場合は、別途「PrintQuality」引数を使用することも検討できます。

IncludeDocProperties引数:ドキュメントプロパティの含めるか

IncludeDocProperties引数には、PDFファイルにExcelブックのドキュメントプロパティ(タイトル、作成者など)を含めるかどうかを指定します。Trueを指定すると含め、Falseを指定すると含めません。

  • True: ドキュメントプロパティを含めます。
  • False: ドキュメントプロパティを含めません。

通常は`True`を指定することが多いですが、情報漏洩のリスクを考慮して`False`にすることもあります。

IgnorePrintAreas引数:印刷範囲を無視するか

IgnorePrintAreas引数では、シートに設定されている印刷範囲を無視してブック全体を出力するかどうかを指定します。Excelのシートによっては、意図しない範囲が出力されないように印刷範囲が設定されている場合があります。

  • True: シートに設定されている印刷範囲を無視し、シート全体を出力します。
  • False: シートに設定されている印刷範囲のみを出力します。

ブック全体をPDF化したい場合は`True`、印刷設定に準拠させたい場合は`False`を指定します。

OpenAfterPublish引数:保存後に開くか

OpenAfterPublish引数では、PDFファイルの出力が完了した後に、そのファイルを開くかどうかを指定します。PDFファイルが正しく作成されたかすぐに確認したい場合に便利です。

  • True: PDFファイルが作成された後、自動的に開きます。
  • False: PDFファイルは作成されますが、自動的には開きません。

デバッグ時や確認作業で`True`を指定し、自動処理の場合は`False`にすることが一般的です。

ADVERTISEMENT

特定のシートのみをPDFに出力する方法

ブック全体ではなく、特定のシートだけをPDFとして出力したい場合もよくあります。その場合は、`Workbook`オブジェクトではなく、対象となる`Worksheet`オブジェクトに対して`ExportAsFixedFormat`メソッドを呼び出します。

例えば、「Sheet1」という名前のシートをPDFとして保存するコードは以下のようになります。

  1. VBAエディタを開き、標準モジュールにコードを記述します。
  2. 以下のコードを記述します。
    Sub ExportSpecificSheetToPDF()
        Dim ws As Worksheet
        Dim SavePath As String
        Dim FileName As String
    
        ' 対象のワークシートを指定します
        Set ws = ThisWorkbook.Sheets("Sheet1") ' ここでシート名を変更してください
    
        ' 保存するフォルダパスを指定します
        SavePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
    
        ' 保存するファイル名を指定します(例: シート名.pdf)
        FileName = ws.Name & ".pdf"
    
        ' 指定したシートをPDFとしてエクスポートします
        ws.ExportAsFixedFormat Type:=xlTypePDF, _
                               Filename:=SavePath & FileName, _
                               Quality:=xlQualityStandard, _
                               IncludeDocProperties:=True, _
                               IgnorePrintAreas:=False, _
                               OpenAfterPublish:=True
    
        MsgBox "PDFファイルが " & SavePath & FileName & " に保存されました。", vbInformation
    End Sub
  3. コードを実行します。

このコードでは、`ThisWorkbook.Sheets(“Sheet1”)`の部分で出力したいシート名を指定しています。シート名が異なる場合は、この部分を適宜修正してください。これにより、指定したシートのみが独立したPDFファイルとして保存されます。

複数のシートを個別のPDFファイルとして出力する方法

複数のシートをそれぞれ個別のPDFファイルとして保存したい場合、ループ処理を活用します。ブック内の各シートを順番に処理し、それぞれのシートをPDFとしてエクスポートします。

以下のコードは、ブック内のすべてのシートを個別のPDFファイルとしてデスクトップに保存する例です。

  1. VBAエディタを開き、標準モジュールにコードを記述します。
  2. 以下のコードを記述します。
    Sub ExportAllSheetsAsSeparatePDFs()
        Dim ws As Worksheet
        Dim SavePath As String
        Dim FileName As String
        Dim InitialSheet As String
    
        ' 現在アクティブなシート名を記録しておきます
        InitialSheet = ActiveSheet.Name
    
        ' 保存するフォルダパスを指定します
        SavePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
    
        ' 各ワークシートをループ処理します
        For Each ws In ThisWorkbook.Worksheets
            ' ファイル名を指定します(例: シート名.pdf)
            FileName = ws.Name & ".pdf"
    
            ' シートをPDFとしてエクスポートします
            ws.ExportAsFixedFormat Type:=xlTypePDF, _
                                   Filename:=SavePath & FileName, _
                                   Quality:=xlQualityStandard, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   OpenAfterPublish:=False ' 各ファイルを開かないようにFalseに設定
        Next ws
    
        ' 処理完了後、最初にアクティブだったシートに戻します
        ThisWorkbook.Sheets(InitialSheet).Activate
    
        MsgBox "すべてのシートが個別のPDFファイルとして保存されました。", vbInformation
    End Sub
  3. コードを実行します。

このコードでは、`For Each ws In ThisWorkbook.Worksheets`ループを使用して、ブック内のすべてのシートを順番に処理します。各シートに対して`ExportAsFixedFormat`メソッドが実行され、シート名と同じ名前のPDFファイルが作成されます。`OpenAfterPublish:=False`に設定しているため、各PDFファイルは自動的に開きません。処理完了後、元のシートに戻るようにしています。

特定のセル範囲をPDFに出力する方法

シート全体ではなく、特定のセル範囲だけをPDFとして出力したい場合もあります。その際は、`Range`オブジェクトに対して`ExportAsFixedFormat`メソッドを呼び出します。この場合、`IgnorePrintAreas`引数を`False`(または省略)に設定することが重要です。なぜなら、印刷範囲が設定されていない場合、Excelはシート全体を出力しようとするからです。

以下のコードは、アクティブシートのA1からC10のセル範囲をPDFとして保存する例です。

  1. VBAエディタを開き、標準モジュールにコードを記述します。
  2. 以下のコードを記述します。
    Sub ExportRangeToPDF()
        Dim TargetRange As Range
        Dim SavePath As String
        Dim FileName As String
    
        ' 出力したいセル範囲を指定します
        Set TargetRange = ActiveSheet.Range("A1:C10") ' ここで範囲を変更してください
    
        ' 保存するフォルダパスを指定します
        SavePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
    
        ' 保存するファイル名を指定します
        FileName = "RangeOutput.pdf" ' ファイル名を任意に変更してください
    
        ' 指定したセル範囲をPDFとしてエクスポートします
        TargetRange.ExportAsFixedFormat Type:=xlTypePDF, _
                                       Filename:=SavePath & FileName, _
                                       Quality:=xlQualityStandard, _
                                       IncludeDocProperties:=True, _
                                       IgnorePrintAreas:=False, _
                                       OpenAfterPublish:=True
    
        MsgBox "PDFファイルが " & SavePath & FileName & " に保存されました。", vbInformation
    End Sub
  3. コードを実行します。

このコードでは、`ActiveSheet.Range(“A1:C10”)`で出力したいセル範囲を指定しています。必要に応じて、シート名やセル範囲を変更してください。この方法で、Excelシートの一部だけを切り取ってPDF化することが可能です。

PDF出力時のセキュリティ警告と対処法

VBAでPDF出力を自動化する際、セキュリティ上の理由から「セキュリティ警告」が表示されることがあります。特に、Web上のファイルや信頼されていないソースから取得したファイルを開いた場合に、マクロの実行がブロックされることがあります。

この警告が表示されると、マクロが実行されずPDF出力ができません。対処法としては、以下のいずれかの方法が考えられます。

1. Excelのセキュリティセンター設定の変更

Excelの「セキュリティセンター」で、マクロの設定を変更することで警告を回避できます。ただし、この設定はExcel全体のセキュリティレベルを下げる可能性があるため、注意が必要です。

  1. 「ファイル」タブをクリックします。
  2. 「オプション」を選択します。
  3. 「セキュリティセンター」を選択し、「セキュリティセンターの設定」ボタンをクリックします。
  4. 「マクロの設定」を選択します。
  5. 「すべてのマクロを通知して実行する」または「すべてのマクロを無効にする(通知なし)」を選択します。(※「すべてのマクロを有効にする」はセキュリティリスクが高いため推奨しません)
  6. 「OK」をクリックして設定を保存します。

「すべてのマクロを通知して実行する」を選択した場合、マクロを実行する際に毎回確認メッセージが表示されます。そこで「マクロを有効にする」を選択すれば、コードが実行されます。

2. ファイルの信頼性設定(ゾーン解除)

ダウンロードしたファイルやネットワーク上のファイルの場合、Windowsの「ゾーン解除」機能を利用できます。

  1. PDF出力を行うVBAコードが保存されているExcelファイル(.xlsm形式など)を右クリックします。
  2. 「プロパティ」を選択します。
  3. 「全般」タブの下部にある「セキュリティ」欄で、「許可する」にチェックを入れ、「適用」→「OK」をクリックします。

これにより、そのファイルは信頼できるものとして扱われ、セキュリティ警告が表示されにくくなります。この方法は、自分が作成したファイルや信頼できるソースからのファイルに対してのみ行うようにしてください。

PDF出力時の品質やレイアウトに関する注意点

ExportAsFixedFormatメソッドは便利ですが、PDF出力時の品質やレイアウトに関して注意すべき点がいくつかあります。意図しない結果にならないよう、事前に確認しておきましょう。

1. 印刷設定との違い

PDF出力は、Excelの「印刷」機能とは異なる挙動を示すことがあります。特に、`IgnorePrintAreas`引数の設定は重要です。`False`に設定した場合、シートに設定された印刷範囲が優先されます。意図しない範囲が出力されないように、印刷範囲の設定を事前に確認・調整しておきましょう。

2. ページ設定と用紙サイズ

PDFの用紙サイズは、Excelシートのページ設定に基づきます。A4、Letterなどの用紙サイズや、印刷の向き(縦/横)が意図通りに設定されているか確認してください。特に、複数のシートをまとめて出力する場合、各シートでページ設定が異なると、PDFのレイアウトが崩れる可能性があります。

3. グラフや画像の解像度

グラフや画像などのオブジェクトは、PDFの品質設定(`Quality`引数)によって解像度が影響を受けることがあります。高画質が必要な場合は、`xlQualityStandard`よりもさらに詳細な設定が可能な場合もありますが、基本的には標準品質で十分な場合が多いです。

4. ページ区切り線の表示

Excelの改ページプレビューで表示されるページ区切り線は、PDF出力時にも反映されます。PDFのページ区切りが意図しない場所で入らないように、必要に応じて手動改ページを調整してください。

VBAでPDF出力を自動化するメリットと応用例

VBAによるPDF出力の自動化は、単に手間を省くだけでなく、業務プロセス全体の効率化に貢献します。以下にそのメリットと応用例を挙げます。

メリット

  • 作業時間の短縮: 手作業での保存作業が不要になり、大幅な時間短縮が実現します。
  • ヒューマンエラーの削減: ファイル名の付け間違い、保存場所の間違いなどのミスを防ぎます。
  • 定型業務の効率化: 毎日・毎週行う定型的なレポート作成・共有作業を自動化できます。
  • 一貫性の確保: 常に同じ手順でPDFが作成されるため、出力内容に一貫性が保たれます。

応用例

  • 日次・週次レポートの自動送信: 定期的に作成されるレポートをPDF化し、メールで関係者に自動送信する。
  • 請求書・納品書の自動生成: 顧客データに基づき、個別の請求書や納品書をPDFで自動生成し、保存または送信する。
  • 営業資料のバッチ出力: 複数の営業資料テンプレートを元に、顧客ごとにカスタマイズした資料をPDFで一括出力する。
  • 監査・証跡用データの保存: 特定の期間や条件に合致するデータを抽出し、PDFとしてアーカイブする。

これらの応用例は、ExportAsFixedFormatメソッドと他のVBA機能(ファイル操作、メール送信など)を組み合わせることで実現可能です。

まとめ

Excel VBAのExportAsFixedFormatメソッドを活用することで、PDF出力作業を劇的に効率化できます。ブック全体、特定のシート、あるいはセル範囲を指定してPDF化する基本的なコードから、ファイル名や品質などの詳細設定までを解説しました。セキュリティ警告の対処法や、出力時の注意点も理解することで、よりスムーズに自動化を進められるでしょう。ExportAsFixedFormatメソッドと他のVBA機能を組み合わせることで、レポートの自動送信や請求書の自動生成など、様々な業務に応用できます。まずは基本的なコードを試してみて、ご自身の業務に合わせてカスタマイズしていくことをお勧めします。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】