Excelで複数のシートを個別にPDFとして保存したい場面は多くあります。私はExcelのプレビューが信用できないので紙への印刷の前確認としてPDF出力をよく利用します。

手作業で一つずつ出力するのは時間がかかりますが、VBAを使えば一括で効率的に処理できます。

1. 全シートを1つのPDFファイルにまとめて出力

以下のマクロはアクティブブックの全シートを1つのPDFファイルとして出力します。

PDFファイル名は「ブック名+.pdf」です。例えば、ブック名が「abc.xlsx」であれば、「abc.xlsx.pdf」でPDFファイルを作成します。

2. すべてのシートを個別のPDFファイルとして出力

以下のマクロはアクティブブックの各シートを1つずつPDFファイルとして出力します。

PDFファイル名は「シート名+.pdf」です。

コードのポイント解説

上の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出力時には以下の注意点があります。

  1. ファイル名に使えない文字
    シート名に「\」「/」「:」「*」「?」「”」「<」「>」「|」が含まれているとエラーになります。事前に置換処理が必要です。
  2. 上書き確認:
    同名ファイルが存在する場合、確認なしで上書きされます。必要に応じて存在チェックを追加してください。
  3. 印刷範囲の設定:
    印刷範囲が設定されていない場合、シート全体が出力されます。事前に印刷範囲を確認しましょう。
  4. 非表示シートの扱い:
    上記コードでは非表示シートも出力されます。必要に応じて ws.Visible = xlSheetVisible で判定してください。