VBAでPDF出力をする方法(ExportAsFixedFormatメソッド)

PDF出力
この記事は約8分で読めます。

今回はExcel-VBAでPDF出力する方法を紹介します。

全てのシートを一括でPDF出力する場合や一部のシートのみをPDF出力する場合など様々な条件での方法をサンプルコードを交えて紹介します。

ExportAsFixedFormatメソッド

Excel-VBAでPDF出力するにはExportAsFixedFormatメソッドを使用します。

構文は次のようになります。

object.ExportAsFixedFormat(Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExClassPtr)

object は出力対象となるオブジェクトのオブジェクト式になります。適用できるのはWorkbookオブジェクトChartオブジェクトWorksheetオブジェクトRangeオブジェクトです。

引数には次のようなものがあります。

名前必須/オプション説明
Type必須出力形式を指定します。
PDFファイルで出力するには定数 xlTypePDFを、
XPSドキュメントで出力するには定数 xlTypeXPS を指定します。
FileName省略可能保存するファイル名を文字列で指定します。
フォルダパスを省略するとカレントフォルダに保存されます。
Quality省略可能出力時の品質を指定します。
最小限の品質で出力するには定数 xlQualityMinimum
標準の品質で出力するには定数 xlQualityStandardを指定します。
IncludeDocProperties省略可能ドキュメントプロパティを含める場合はTrueを、
省略する場合はFalseを指定します。
IgnorePrintAreas省略可能Trueにすると印刷範囲が無視されます。
Falseでは印刷範囲が適用されます。
From省略可能出力する開始ページを指定します。
省略した場合は先頭ページから出力されます。
To省略可能出力の終了ページを指定します。
省略した場合は最後のページまで出力されます。
OpenAfterPublish省略可能Trueに設定すると出力後にビューアが開いてファイルが表示されます。
Falseではビューアは開かれません。
FixedFormatExtClassPtr省略可能FixedFormatExtクラスへのポインタです。

引数が多いですがこのうち必須なのはTypeのみです。PDF出力する場合はこの引数Typeに定数xlTypePDFを指定します。

あとは必要に応じてファイル名を指定する場合は引数FileNameを、出力ページを指定する場合は引数FromToを指定します。

ブックの全シートをひとつのPDFに出力する方法

あるブックの全てのシートをまとめてひとつのPDFファイルとして出力するにはそのブックのWorkbookオブジェクトに対してExportAsFixedFormatメソッドを使用します。

次のコードではマクロを実行したブックの全シートをそのブックと同じフォルダ内に「test1.pdf」というファイル名で保存します。

Sub sample1()
    Dim exPath As String
    exPath = ThisWorkbook.Path & "\test1.pdf"
    ThisWorkbook.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        filename:=exPath
End Sub

全てのシートを各シート毎にそれぞれ別のPDFに出力する方法

全てのシートに対して各シート毎にファイルをわけてPDF出力するにはFor Each .. Nextステートメントを使ってそれぞれのWorksheetオブジェクトに対してExportAsFixedFormatメソッドを使用します。

次のコードでは各シートをそれぞれ「シート名.pdf」というファイル名で最小限の品質にしてPDF出力します。

Sub sample2()
    Dim ws As Worksheet
    Dim exPath As String
    For Each ws In Worksheets
        exPath = ThisWorkbook.Path & "\" & ws.Name & ".pdf"
        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            filename:=exPath, _
            Quality:=xlQualityMinimum
    Next
End Sub

特定のひとつのシートをPDF出力する方法

ひとつのシートのみをPDF出力するにはそのシートのWorksheetオブジェクトに対してExportAsFixedFormatメソッドを使用します。

次のコードではシート名「Sheet1」のワークシートのうち2ページ目から3ページ目までを「test2.pdf」というファイル名で出力し、出力後にビューアでファイルを開きます。

Sub sample3()
    Dim exPath As String
    exPath = ThisWorkbook.Path & "\test2.pdf"
    Worksheets("Sheet1").ExportAsFixedFormat _
        Type:=xlTypePDF, _
        filename:=exPath, _
        From:=2, _
        To:=3, _
        OpenAfterPublish:=True
End Sub

指定した複数のシートをひとつのPDFに出力する方法

指定した複数のシートをまとめて出力するにはワークシートのグループ化を利用します。

ワークシートのグループ化というのは、選択した複数のワークシートを作業グループとしてまとめることでそのうちの1つのワークシートで作業した変更内容をグループ化した他のワークシートにも反映できる機能です。

通常のExcel作業においてワークシートをグループ化するにはCtrlキーを押しながらグループ化したい複数のワークシートタブをクリックします。

試しに「Sheet1」と「Sheet3」をCtrlキーを押しながらクリックしグループ化してみましょう。その状態でSheet1の1行目を赤色に塗りつぶすと、Sheet3の1行目も赤色に塗りつぶされているのが確認できます。

VBAではArray関数を利用してグループ化することができます。

グループ化したあとでそのうちのひとつのワークシートに対してPDF出力を行うとグループ化したシートがまとめてPDF出力されます。

次のコードでは「Sheet1」と「Sheet3」をひとつのPDFファイルとして Dドライブに「test3.pdf」というファイル名で 出力します。

Sub sample4()
    Dim exPath As String
    exPath = "D:\test3.pdf"
    '//ワークシートをグループ化
    Worksheets(Array("Sheet1", "Sheet3")).Select
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        filename:=exPath
    '//ワークシートのグループ化を解除
    Worksheets("Sheet1").Select
End Sub

サンプルコードでは最後にワークシートのグループ化を解除しています。

グループ化されたままだとマクロ終了後にSheet1で作業した内容がSheet3にも反映されてしまいます。意図せず反映されてしまうのを防ぐためにもマクロ内でグループ化したものは終了前にグループ化解除をしておいたほうがよいでしょう。

グループ化を解除するにはいずれかひとつのシートを選択します。

指定した複数のシートをそれぞれ別のPDFファイルとして出力する方法

指定した複数のシートをそれぞれ別のPDFファイルとして出力するにはArray関数を使って複数のシートをコレクション化し、そのコレクションに対してFor Each .. Next ステートメントを使います。

これまで紹介した方法の応用ですね。

次のコードでは「Sheet1」「Sheet3」「Sheet5」のシートをそれぞれ「1001.pdf」「1002.pdf」「1003」というファイル名でブックと同じフォルダ内にPDFファイルとして出力します。

Sub sample5()
    Dim ws As Worksheet
    Dim num As Long
    Dim exPath As String
    For Each ws In Worksheets(Array("Sheet1", "Sheet3", "Sheet5"))
        num = num + 1
        exPath = ThisWorkbook.Path & "\100" & num & ".pdf"
        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            filename:=exPath
    Next
End Sub

コメント

タイトルとURLをコピーしました