【Excel VBA】PDFを出力する方法!複数シートやセル範囲指定も可!

VBAでPDFを出力したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAでPDFを出力したいが方法がよくわからない
・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コードは以下の通りです。

タカヒロ
タカヒロ
このコードはMicrosoftドキュメントのWorkbook.ExportAsFixedFormat メソッド説明ページのサンプルコードをベースにしています。

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を出力していきます。

タカヒロ
タカヒロ
ActiveWorkbook.Worksheets(Array(“1シート目”, “3シート目”)).ExportAsFixedFormat
と指定すれば機能するかと思っていましたが、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

タカヒロ
タカヒロ
複数のシートを選択した状態のままですと、編集時に支障がでますので、PDF出力後に解除するようにしています。

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をを出力する方法
・VBAでセル範囲指定した上PDFを出力する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です