シートをPDF形式で出力する方法
今回の目標
Workbook オブジェクトや、Worksheet オブジェクトには、ExportAsFixedFormat メソッドがあります。
ExportAsFixedFormat メソッドで指定したオブジェクトを PDF形式や XPS形式で出力することができます。
今回は、Worksheets オブジェクトを PDF形式で出力する方法を解説します。
目標リスト
- PDFファイルの出力できるようになる
説明
PDFファイルの出力(ExportAsFixedFormat)とは
ExportAsFixedFormat メソッドで PDF形式に出力することができます。
ExportAsFixedFormat メソッドの構文と引数一覧
ExportAsFixedFormat メソッドの構文と引数一覧です。
ExportAsFixedFormat メソッドの構文
ActiveSheet.ExportAsFixedFormat(Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr)
ExportAsFixedFormat の引数一覧
| 引数 | 省略 | 規定値 | 説明 |
|---|---|---|---|
| Type | 不可 | (なし) | xlTypePDF または xlTypeXPS を指定。PDFファイルの場合、xlTypePDFを指定する |
| FileName | 可能 | 表下参照※ | 出力先のパスやファイル名を指定。 |
| Quality | 可能 | xlQualityStandard | xlQualityStandard(標準の品質) または xlQualityMinimum(最小限の品質)を指定する。 |
| IncludeDocProperties | 可能 | False | ドキュメント プロパティを含めるか。True:含める、False:含めない。 |
| IgnorePrintAreas | 可能 | False | 印刷範囲を無視するか。True:無視する。False:無視しない。 |
| From | 可能 | 先頭ページ | 発行を開始するページ番号を指定。 |
| To | 可能 | 最終ページ | 発行を終了するページの番号を指定。 |
| OpenAfterPublish | 可能 | False | 発行後に既定のビューアーで開くか。True:開く。False:開かない。 |
| FixedFormatExtClassPtr | 可能 | - | FixedFormatExt クラスへのポインター(通常、使用しない)。 |
PDFファイルを出力する
パス・ファイル名を指定してPDFファイルを出力する
パス・ファイル名を指定してPDFファイルを出力する方法です。
なお、パス・ファイル名を指定しなくても、PDFファイルを出力できますが、実用性がないため引数を指定します。
下のサンプルでは、マクロを実行している Excelファイルが保存されているフォルダに「サンプル.pdf」が出力されます。
なお、Excelファイルが1度も保存されていない場合は、(環境にもよりますが)通常はドキュメントフォルダに保存されます。
サンプルコード
Sub PdfOutput1()
Dim savePath As String '出力先のパスとファイル名を保存する
' 出力先のパスとファイル名を指定する
savePath = IIf(ThisWorkbook.Path <> "", ThisWorkbook.Path & "¥", "")
savePath = savePath & "サンプル.pdf"
' PDF形式でファイルを出力する
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=savePath
End Sub
出力結果
マクロを実行している Excelファイルが保存されているフォルダに「サンプル.pdf」が出力されます。 なお、Excelファイルが1度も保存されていない場合は、(環境にもよりますが)通常はドキュメントフォルダに保存されます。
出力範囲を指定してPDFファイルを出力する
PDFファイルに出力する前に「PageSetup.PrintArea」のプロパティを使用することで、出力範囲(印刷範囲)を指定できます。 下のサンプルでは、出力範囲(印刷範囲)を「セルA1~B30」に指定してPDFファイルを出力します。
サンプルコード
Sub PdfOutput2()
Dim savePath As String '出力先のパスとファイル名を保存する
' 出力先のパスとファイル名を指定する
savePath = IIf(ThisWorkbook.Path <> "", ThisWorkbook.Path & "¥", "")
savePath = savePath & "サンプル.pdf"
'出力範囲(印刷範囲)を「A1:B30」に指定する
ActiveSheet.PageSetup.PrintArea = "A1:B30"
' PDF形式でファイルを出力する
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=savePath
End Sub
出力結果
マクロを実行している Excelファイルが保存されているフォルダに「サンプル.pdf」が出力されます。 この PDFファイルは、出力範囲(印刷範囲)が「A1:B30」です。 なお、Excelファイルが1度も保存されていない場合は、(環境にもよりますが)通常はドキュメントフォルダに保存されます。
複数のシートを1つのPDFファイルで出力する
2シート以上を1つのPDFファイルにまとめて出力するには、「Worksheets(Array("出力対象のシート名1", "出力対象のシート名2")).Select」で出力する対象のシートを選択した状態で、
「ActiveSheet.ExportAsFixedFormat」で出力してください。
なお、PDFに出力するとき、PDFファイルの先頭のページとなるシートは、Array関数で指定した順番ではなく、シートの見出しが左に表示されているシートの順となります。
例えば、Array("Sheet1", "Sheet2")と指定しても、シートの見出しが左から順に "Sheet2" → "Sheet1" となっていると、"Sheet2" → "Sheet1" の順で出力されます。
サンプルコード
Sub PdfOutput3()
Dim savePath As String '出力先のパスとファイル名を保存する
Dim actSheet As String 'アクティブなシート名を保存する
' 出力先のパスとファイル名を指定する
savePath = IIf(ThisWorkbook.Path <> "", ThisWorkbook.Path & "¥", "")
savePath = savePath & "サンプル.pdf"
' 処理前のアクティブなシート名を取得する
actSheet = ActiveSheet.Name
' 印刷対象のシートを指定する
ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2")).Select
' PDF形式でファイルを出力する
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=savePath
' アクティブなシートを元に戻す
ThisWorkbook.Worksheets(actSheet).Select
End Sub
出力結果
マクロを実行している Excelファイルが保存されているフォルダに「サンプル.pdf」が出力されます。 この PDFファイルは、「Sheet1」と「Sheet2」が1つにまとめられています。 なお、Excelファイルが1度も保存されていない場合は、(環境にもよりますが)通常はドキュメントフォルダに保存されます。
注意点
出力したPDFファイルを開いたら、エラーが表示された
出力したPDFファイルを開いたときに、次のエラーが発生した時の対応方法です。
これは、出力対処のシートに何もデータがない状態でPDF出力して、そのPDFファイルを AcrobatReader で開くとこのエラーが表示されます。
対処方法としては「出力対象のシートを間違えていないか」や「出力範囲(印刷範囲)を間違えていないか」を確認しましょう。
ドキュメントプロパティについて
引数の「IncludeDocProperties」を True にすると、ドキュメントプロパティが出力したPDFファイルに載ります。 これは、作成者などの情報が含まれるため、PDFファイルをインターネット上に公開する場合等は、False にしましょう。 ※ 「IncludeDocProperties」の引数の指定を省略すると False(ドキュメントプロパティを載せない)となります。
