VBAでPDFを出力したいときはないでしょうか。
けど、そんな中で悩むことは、
・VBAで複数シートのPDFを出力したいが方法がよくわからない
・VBAでセル範囲指定した上PDFを出力したいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・VBAで複数シートのPDFをを出力する方法
・VBAでセル範囲指定した上PDFを出力する方法
についてまとめます!
もくじ
VBAでPDFを出力するイメージ
VBAでPDFを出力するイメージについて説明をします。
3シートあるエクセルブックを用意し、

まずは全シートを対象にPDF形式で出力します。

次に1シートと3シート目を部分選択し、

選択したシートのみPDF形式で出力します。

さらにセルの範囲を指定した上、各シートをPDF形式で出力していきます。

大量のPDFファイルを出力したいときに便利ですね!
それでは早速試してみましょう。
VBAでPDFを出力するメソッドについて
VBAでブックの全シートをPDFを出力する方法について説明をします。
Workbook.ExportAsFixedFormatメソッド数について
使うメソッドはWorkbook.ExportAsFixedFormatメソッドとなります。
ExportAsFixedFormat メソッドは、ブックを PDF または XPS 形式に出力することができます。
Workbook.ExportAsFixedFormat メソッドの構文と設定パラメータは以下の通りです。
構文
| 関数名 | Dir |
|---|---|
| 構文 | object.ExportAsFixedFormat(Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExClassPtr) |
設定パラメータ
今回はPDFを出力するので、パラメータに「Type:=xlTypePDF」を設定します。
| 名前 | 必須 / オプション | データ型 | 説明 |
|---|---|---|---|
| 種類 | 必須 | XlFixedFormatType | xlTypePDF?または?xlTypeXPS?のいずれかを指定できます。 |
| FileName | 省略可能 | バリアント型 | 保存するファイルの名前を示す文字列。 完全なパスを含めるか、Excel によって現在のフォルダーにファイルが保存されます。 |
| Quality | 省略可能 | バリアント型 | xlFixedFormatQuality?定数 (xlQualityStandard?または?xlQualityMinimum) のいずれかに設定できます。 |
| IncludeDocProperties | 省略可能 | バリアント型 | ドキュメント プロパティを含める必要があることを示す?場合は True?に設定するか、省略されたことを示す?場合は False に?設定します。 |
| IgnorePrintAreas | 省略可能 | バリアント型 | True?に設定すると、発行する場合に印刷範囲が無視されます。?False?に設定すると、発行時に設定された印刷領域が使用されます。 |
| From | 省略可能 | バリアント型 | 発行を開始するページのページ番号を指定します。 この引数を省略すると、先頭のページから発行が開始されます。 |
| To | 省略可能 | バリアント型 | 発行を終了するページの番号を指定します。 この引数を省略すると、最後のページまで発行します。 |
| OpenAfterPublish | 省略可能 | バリアント型 | True に設定?すると、発行後にビューアーにファイルが表示されます。?False?に設定すると、ファイルは発行されますが、表示されません。 |
| FixedFormatExtClassPtr | 省略可能 | バリアント型 | FixedFormatExt?クラスへのポインターです。 |
参照:https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.exportasfixedformat
VBAでブックの全シートをPDFを出力する方法
VBAでブックの全シートをPDFを出力する方法について説明をします。
サンプルのシートを準備する
まずはPDFを出力する対象となるシートを準備しましょう。
サンプルでは3シートを用意し、識別のための文字列と背景色をいれています。

VBAコード
サンプルのVBAコードは以下の通りです。
Sub ブック全体をPDF出力する()
Dim strPass As String
Dim strPdfname As String
'PDF出力先のパスを指定します。
strPass = "F:\test"
'PDFのファイル名を指定します。
strPdfname = "test.pdf"
'PDFを出力します。
ActiveWorkbook.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strPass & "\" & strPdfname, _
Quality:=xlQualityStandard, _
OpenAfterPublish:=True
End Sub
VBAを設定する
PDF出力先のパスを指定します。
strPass = "F:\test"PDFのファイル名を指定します。
strPdfname = "test.pdf"VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行する
VBAを実行してみましょう。
PDFが自動で開き、内容を確認すると、
3シートすべてがPDFに出力されていることが確認できましたね。

VBAの説明
VBAについて説明をします。
PDFを出力します。
ActiveWorkbook.ExportAsFixedFormat _
Type:=xlTypePDF, _PDFファイルのパスと名前を指定します。
Filename:=strPass & "\" & strPdfname, _出力時の品質を指定します。xlQualityStandardは標準です。
Quality:=xlQualityStandard, _PDF出力後にオープンするよう指定しています。Trueに設定すると出力後にビューアが表示されます。
OpenAfterPublish:=True
VBAで複数シートのPDFをを出力する方法
VBAで複数シートのPDFをを出力する方法について説明をします。
前回はすべてのシートが対象でしたが、次は以下のように1シート目と3シート目を対象にPDFを出力していきます。

と指定すれば機能するかと思っていましたが、ExportAsFixedFormatメソッドが対応していないようでした。
そこで、手動でPDF出力する時と同じく、該当シートを部分選択し、グループ化した上でPDF出力をするようにしています。
VBAコード
サンプルのVBAコードは以下の通りです。
Sub 複数のシートをPDF出力する()
Dim strPass As String
Dim strPdfname As String
Dim arrSheetname As Variant
'PDF出力先のパスを指定します。
strPass = "F:\test"
'PDFのファイル名を指定します。
strPdfname = "test.pdf"
'PDF出力したい複数のシート名をカンマ区切りで指定します。
arrSheetname = Array("1シート目", "3シート目")
'シートを選択します。
ActiveWorkbook.Worksheets(arrSheetname).Select
'PDFを出力します。
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strPass & "\" & strPdfname, _
Quality:=xlQualityStandard, _
OpenAfterPublish:=True
'シートグループ化を解除します。
ActiveSheet.Select
End Sub
VBAを設定する
PDF出力先のパスを指定します。
strPass = "F:\test"PDFのファイル名を指定します。
strPdfname = "test.pdf"PDF出力したい複数のシート名をカンマ区切りで指定します。
arrSheetname = Array("1シート目", "3シート目")VBAを実行する
VBAを実行してみましょう。
PDFが自動で開き、内容を確認すると、
選択したシートがPDFに出力されていることが確認できましたね。

VBAの説明
VBAについて説明をします。
配列で指定したシートをSelectメソッドで選択します。
ActiveWorkbook.Worksheets(arrSheetname).Select選択したシートを対象にPDFを出力します。
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _PDFファイルのパスと名前を指定します。
Filename:=strPass & "\" & strPdfname, _出力時の品質を指定します。xlQualityStandardは標準です。
Quality:=xlQualityStandard, _PDF出力後にオープンするよう指定しています。Trueに設定すると出力後にビューアが表示されます。
OpenAfterPublish:=Trueシートグループ化を解除します。
ActiveSheet.Select
VBAで選択した複数シートを範囲指定した上PDFを出力する方法
VBAで選択した複数シートを範囲指定した上PDFを出力する方法について説明をします。
サンプルでは”A1:B2″のセルの範囲に絞り、PDFに出力していきます。

VBAコード
サンプルのVBAコードは以下の通りです。
Sub 複数のシートをつセル範囲指定しPDF出力する()
Dim strPass As String
Dim strPdfname As String
Dim arrSheetname As Variant
Dim strRange As String
'PDF出力先のパスを指定します。
strPass = "F:\test"
'PDFのファイル名を指定します。
strPdfname = "test.pdf"
'PDF出力したい複数のシート名をカンマ区切りで指定します。
arrSheetname = Array("1シート目", "3シート目")
'PDF出力したい範囲を指定します。
strRange = "A1:B2"
ActiveWorkbook.Worksheets(arrSheetname).Select
'PDFを出力します。
ActiveSheet.Range(strRange).ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strPass & "\" & strPdfname, _
Quality:=xlQualityStandard, _
OpenAfterPublish:=True
'シートグループ化を解除します。
ActiveSheet.Select
End Sub
VBAを設定する
PDF出力したい範囲を指定します。
strRange = "A1:B2"VBAを実行する
VBAを実行してみましょう。
PDFが自動で開き、内容を確認すると、
選択シートの”A1:B2″がPDFに出力されていることが確認できましたね!

VBAの説明
VBAについて説明をします。
前回のPDFを出力する対象にRangeを加えることにより、さらにセルの範囲をPDF出力対象に加えています。
ActiveSheet.Range(strRange).ExportAsFixedFormat _VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAで複数シートのPDFをを出力する方法
・VBAでセル範囲指定した上PDFを出力する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。










コメントを残す