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を出力する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す