今回は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を、出力ページを指定する場合は引数FromやToを指定します。
ブックの全シートをひとつの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
指定した複数のシートをそれぞれ別の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
コメント
[…] ォルダに入れています。Power Automate Desktopには印刷のメソッドはあってもPDF化するメソッドは無いので、こういう所はマクロの出番です。使用させて頂いたマクロはこちらのコードです。 […]