Excelで複数のシートを個別にPDFとして保存したい場面は多くあります。私はExcelのプレビューが信用できないので紙への印刷の前確認としてPDF出力をよく利用します。
手作業で一つずつ出力するのは時間がかかりますが、VBAを使えば一括で効率的に処理できます。
1. 全シートを1つのPDFファイルにまとめて出力
以下のマクロはアクティブブックの全シートを1つのPDFファイルとして出力します。
PDFファイル名は「ブック名+.pdf」です。例えば、ブック名が「abc.xlsx」であれば、「abc.xlsx.pdf」でPDFファイルを作成します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub AllSheetsToOnePDF() Dim folderPath As String '// フォルダパス Dim fileName As String '// ファイルパス Dim wb As Workbook '// ワークブック '// アクティブブックを対象とする Set wb = ActiveWorkbook '// PDFファイルパスを設定 folderPath = wb.path & "\" fileName = folderPath & wb.Name & ".pdf" '// 全シートを選択 wb.Worksheets.Select '// 1つのPDFとして出力 ActiveSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ fileName:=fileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False '// 最初のシートを選択(選択状態を解除) wb.Worksheets(1).Select MsgBox "全シートのPDF出力が完了しました" & vbCrLf & fileName, vbInformation End Sub |
2. すべてのシートを個別のPDFファイルとして出力
以下のマクロはアクティブブックの各シートを1つずつPDFファイルとして出力します。
PDFファイル名は「シート名+.pdf」です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Sub AllSheetsToPDF() Dim ws As Worksheet '// ワークシート Dim folderPath As String '// PDF保存先フォルダパス Dim fileName As String '// PDFファイル名 '// PDF保存先フォルダを指定(ブックと同じフォルダ) folderPath = ThisWorkbook.path & "\" '// 各シートをループ処理 For Each ws In ThisWorkbook.Worksheets '// ファイル名を設定(シート名.pdf) fileName = folderPath & ws.Name & ".pdf" '// PDFとして出力 '// Type:出力形式:xlTypePDF / xlTypeXPS '// [Filename]:省略可。出力ファイルパス '// [Quality]:省略可。出力品質:xlQualityStandard(標準) / xlQualityMinimum(最小) '// [IncludeDocProperties]:省略可。ドキュメントプロパティを含めるかどうか(True:含める、False:含めない) '// [IgnorePrintAreas]:省略可。印刷範囲を無視するかどうか(True:無視する、False:無視しない) '// [OpenAfterPublish]:省略可。保存後にファイルを開くかどうか(True:開く、False:開かない) ws.ExportAsFixedFormat _ Type:=xlTypePDF, _ fileName:=fileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False Next MsgBox "PDF出力が完了しました", vbInformation End Sub |
コードのポイント解説
上の2つのコードはそれぞれ、1シートを1つのPDFファイルにするか、全てのシートを1つのPDFファイルにするかの違いで、やってることはWorkbook.ExportAsFixedFormatメソッドでのPDF出力であることは同じです。
Workbook.ExportAsFixedFormatメソッドでは引数でPDFを指定することでPDFファイルを出力できます。
ExportAsFixedFormatのパラメータ解説
構文
Sub ExportAsFixedFormat(Type As XlFixedFormatType, [Filename], [Quality], [IncludeDocProperties], [IgnorePrintAreas], [From], [To], [OpenAfterPublish], [FixedFormatExtClassPtr], [WorkIdentity])
| 引数名 | 内容 | 設定値 |
|---|---|---|
| Type | 出力形式 | xlTypePDF / xlTypeXPS |
| [Filename] | 省略可。出力ファイルパス | ファイルパス |
| [Quality] | 省略可。出力品質 | xlQualityStandard(標準) / xlQualityMinimum(最小) |
| [IncludeDocProperties] | 省略可。ドキュメントプロパティを含めるかどうかを指定する。 | True:含める、False:含めない |
| [IgnorePrintAreas] | 省略可。印刷範囲を無視するかどうかを指定する。 | True:無視する、False:無視しない |
| [OpenAfterPublish] | 省略可。保存後にファイルを開くかどうかを指定する。 | True:開く、False:開かない |
実装時の注意点
PDF出力時には以下の注意点があります。
- ファイル名に使えない文字
シート名に「\」「/」「:」「*」「?」「”」「<」「>」「|」が含まれているとエラーになります。事前に置換処理が必要です。 - 上書き確認:
同名ファイルが存在する場合、確認なしで上書きされます。必要に応じて存在チェックを追加してください。 - 印刷範囲の設定:
印刷範囲が設定されていない場合、シート全体が出力されます。事前に印刷範囲を確認しましょう。 - 非表示シートの扱い:
上記コードでは非表示シートも出力されます。必要に応じて ws.Visible = xlSheetVisible で判定してください。