【Excel VBA】エクセルシートをPDFで出力/名前を付けて保存する

アイキャッチ
エクセルシートをPDF出力するコード

Worksheets(“Sheet1”).ExportAsFixedFormat Type:=xlTypePDFでSheet1をPDF出力します。保存先の指定やページ指定、ビューアー表示などはパラメーターを追加して設定します。

最近、電子文書のやりとりはアプリケーションファイルそのものではなく、PDFファイルで行う機会が増えてきました。VBAのExportAsFixedFormatメソッドを使用してPDFファイルを出力/保存する方法を4パターン紹介します。

メソッド1つ覚えるだけでPDF出力ができます。設定するパラメーターが多いだけでコードは簡単です。

目次

PDFファイル名を日付で出力/保存するサンプルコード

サンプルはsheet1の印刷範囲をPDF出力し、Documentsフォルダにファイル名Book1yyyymmdd(ファイル名+日付)で保存するコードです。保存先のパスは環境に合わせて変更して下さい。

シートを指定してPDFファイルを出力/保存(印刷ページ指定可能)

15行目の緑字部分を環境に合わせて編集してください。

Public Sub PDF出力シート指定(ByVal シート名 As Worksheet, ByVal PDFフルパス As String)

    シート名.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=PDFフルパス, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
    'From:=, _                            '必要ならアンコメント、不要なら削除
        'To:=, _                              '必要ならアンコメント、不要なら削除
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
End Sub

Public Sub Test()
    Call PDF出力シート指定(Worksheets("Sheet1"), "C:\Users\YOU\Documents\Book1" & Format(Date, "yyyymmdd") & ".pdf") '出力シート、保存先、保存名指定
End Sub

“C:\Users\YOU\Desktop\Book1” & Format(Date, “yyyymmdd”) & “.pdf”)で保存先をデスクトップに指定できます。

私はいつも、引数を渡すSubプロシージャをコピペで使いまわしています。パラメーターは都度調べるのが面倒なので省略できるものも敢えて記述しています。FromToはページ指定用のパラメーターです。必要ならアンコメント、不要なら削除して下さい。

全シートを1つのPDFファイルへ出力/保存

後述で補足していますが、ExportAsFixedFormatメソッドWorkbookオブジェクトにも含まれています。全シートを出力するにはWorkbooksコレクションを使用します。

Public Sub PDF出力全シート(ByVal エクセルファイル名 As Workbook, ByVal PDFフルパス As String)

    エクセルファイル名.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=PDFフルパス, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
End Sub

Public Sub Test2()
    Call PDF出力シート指定(Worksheets("Sheet1"), "C:\Users\YOU\Documents\Book1" & Format(Date, "yyyymmdd") & ".pdf")
End Sub

この方法だと1つのPDFファイルに全ページが出力されます。出力ファイルを分けたい場合は次に紹介する方法を使用します。

全シートをシートごとにPDFファイル出力/保存

シートごとにPDFファイルを分けたいのであれば、処理もシートごとにする必要があります。

Public Sub PDF出力シート毎()
    Dim ws As Worksheet
    
    For Each ws In Worksheets
        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:="C:\Users\YOU\Documents\" & ws.Name & ".pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    Next ws
End Sub

シートを指定してPDFファイルへ出力/保存

指定した複数のシートを出力するのであれば、指定するシートを配列に格納し、For Eachステートメントで格納されたシートを出力します。

Public Sub PDF出力シート指定()
    Dim ws As Variant
    Dim シート名 As Variant
    
    シート名 = Array("Sheet1", "Sheet2")
    
    For Each ws In シート名    'In Worksheets("Sheet3").Range("セル範囲").Value でセルにシート名を入力しても可
        Worksheets(ws).ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:="C:\Users\YOU\Documents\" & ws & ".pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    Next ws
End Sub

サンプルはArray関数を使って、コードの中で出力するシートを指定しています。指定するシートが頻繁に変わるのであれば、セルにシート名を入力し、そのセルを配列として参照するようなコードで対応できます(サンプルコメントアウト部参照)。

パラメーターが多いので一見、面倒そうなコードですが実はそうでもありません。エクセルファイルをPDF出力/保存する必要がある方は、是非コピペしてみて下さい。

ExportAsFixedFormatメソッドについて

ExportAsFixedFormatメソッドについて補足します。

ExportAsFixedFormatメソッドが含まれるクラス

オブジェクトブラウザで確認すると

  • Chartクラス
  • Rangeクラス
  • Workbookクラス
  • Worksheetクラス

のメンバーである事がわかります。

ExportAsFixedFormatメソッドで出力できるファイル

PDFファイル以外にもXPSファイル(Microsoft版PDFのようなもの)が保存できます。

私は今までXPSファイル形式を要求された事はありませんが、XPSの普及率ってどうなんでしょうか?

ExportAsFixedFormatメソッドのパラメーター

メソッドにパラメーターを指定するだけでPDF出力ができます。パラメーターは多いですが、コードは難しくありません。

ExportAsFixedFormat (TypeFileNameQualityIncludeDocPropertiesIgnorePrintAreasFromToOpenAfterPublishFixedFormatExtClassPtr )

パラメーターはType以外省略可能です。

Type

ファイル形式を指定します。xlTypePDF(PDF形式)、xlTypeXPS(XPS形式):省略不可

FileName

出力ファイル名を指定します。保存先を指定可能です。保存先を指定しない場合、カレントディレクトリ(現在作業中のフォルダ)に保存されます。省略すると、ファイル名でPDF出力はされますが、ファイルは保存されません。

Quality

出力品質を指定します。xlQualityMinimum(最小限の品質:容量軽)、xlQualityStandard(標準品質)です。省略するとxlQualityStandard(標準品質)です。

IncludeDocProperties

ファイルのプロパティ(作成者、等)を保存するかどうかをTrueFalseで指定します。省略するとFalse(保存しない)です。

IgnorePrintAreas

印刷範囲を無視するかどうかをTrueFalseで指定します。省略するとFalse(無視しない)です。

FromTo

それぞれ出力の開始と終了ページを指定できます。省略するとそれぞれ先頭、最終ページになります。

OpenAfterPublish

出力後にビューアーで出力結果を表示するかどうかをTrueFalseで指定します。省略するとFalse(ビューアーが立ち上がらない)です。

FixedFormatExtClassPtr

「FixedFormatExtクラスへのポインターです。(docs.microsoft.com)」だそうですが、ググってもサンプルは見つかりませんでした。そもそもVBAのポインタに関する情報がほとんどヒットしないので、理解できなくても問題ないのかなと(私見)。

応用でPDFをメール添付/送信するマクロを作成しました。興味ある人は読んでみて下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次