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
私はいつも、引数を渡すSubプロシージャをコピペで使いまわしています。パラメーターは都度調べるのが面倒なので省略できるものも敢えて記述しています。From、Toはページ指定用のパラメーターです。必要ならアンコメント、不要なら削除して下さい。
全シートを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
パラメーターが多いので一見、面倒そうなコードですが実はそうでもありません。エクセルファイルをPDF出力/保存する必要がある方は、是非コピペしてみて下さい。
ExportAsFixedFormatメソッドについて
ExportAsFixedFormatメソッドについて補足します。
ExportAsFixedFormatメソッドが含まれるクラス
オブジェクトブラウザで確認すると
- Chartクラス
- Rangeクラス
- Workbookクラス
- Worksheetクラス
のメンバーである事がわかります。
ExportAsFixedFormatメソッドで出力できるファイル
PDFファイル以外にもXPSファイル(Microsoft版PDFのようなもの)が保存できます。
私は今までXPSファイル形式を要求された事はありませんが、XPSの普及率ってどうなんでしょうか?
ExportAsFixedFormatメソッドのパラメーター
メソッドにパラメーターを指定するだけでPDF出力ができます。パラメーターは多いですが、コードは難しくありません。
ExportAsFixedFormat (Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr )
パラメーターはType以外省略可能です。
- Type
ファイル形式を指定します。xlTypePDF(PDF形式)、xlTypeXPS(XPS形式):省略不可
- FileName
出力ファイル名を指定します。保存先を指定可能です。保存先を指定しない場合、カレントディレクトリ(現在作業中のフォルダ)に保存されます。省略すると、ファイル名でPDF出力はされますが、ファイルは保存されません。
- Quality
出力品質を指定します。xlQualityMinimum(最小限の品質:容量軽)、xlQualityStandard(標準品質)です。省略するとxlQualityStandard(標準品質)です。
- IncludeDocProperties
ファイルのプロパティ(作成者、等)を保存するかどうかをTrue、Falseで指定します。省略するとFalse(保存しない)です。
- IgnorePrintAreas
印刷範囲を無視するかどうかをTrue、Falseで指定します。省略するとFalse(無視しない)です。
- From、To
それぞれ出力の開始と終了ページを指定できます。省略するとそれぞれ先頭、最終ページになります。
- OpenAfterPublish
出力後にビューアーで出力結果を表示するかどうかをTrue、Falseで指定します。省略するとFalse(ビューアーが立ち上がらない)です。
- FixedFormatExtClassPtr
「FixedFormatExtクラスへのポインターです。(docs.microsoft.com)」だそうですが、ググってもサンプルは見つかりませんでした。そもそもVBAのポインタに関する情報がほとんどヒットしないので、理解できなくても問題ないのかなと(私見)。
応用でPDFをメール添付/送信するマクロを作成しました。興味ある人は読んでみて下さい。