PDF出力するExcelVBAコード

スポンサーリンク

Excel・Word・PowerPointにはPDF出力機能がある

どのバージョンから使えるようになったのか正確に覚えていないですが、ここ最近のOffice製品にはPDFでの出力機能が搭載されています。この機能はマクロ(VBA)でも使用でき、たくさんのファイルを一気に出力するのに便利です。

今回はPDF出力するExcelVBAコードを紹介します。

ExportAsFixedFormatと引数の指定について

PDF出力を行うVBAコードはExportAsFixedFormatというものです。
引数がいくつか指定する必要があるので、引数の内容について紹介します。

①Type(必須)

PDFで出力するかXPSで出力するかを指定します。
xlTypePDFかxlTypeXPSのどちらかを選択します。

②FileName(省略可)

ファイル名とパスを指定します。
指定しない場合、現在のフォルダに保存されます。

③Quality(省略可)

出力されるファイルの品質を標準か低品質で指定します。
xlQualityStandard または xlQualityMinimum のどちらかを選択します。

④IgnorePrintAreas(省略可)

設定されている印刷エリアを無視するかどうかを指定します。
Trueに設定すると印刷範囲が全体になります。

⑤From(省略可)

発行を開始するページを数字で指定します。
省略すると先頭ページから発行されます。

⑥To(省略可)

発行を終了するページを数字で指定します。
省略すると最後のページまで発行します。

引数はこれですべてではありませんが上記の内容を把握していればほとんどの作業ができるようになります。

ExportAsFixedFormatを用いたサンプルコード

ExcelでアクティブシートをPDFで出力するサンプルコードは以下のようになります。

シートを選択するVBAコードと併用してシート全体のうち印刷範囲の1ページ目をPDF出力するコードになります。

PDFの出力範囲は印刷範囲で選択できるので、VBAを用いて自動で設定することもできます。
VBAで印刷範囲を設定する方法はこちらを参考にしてください。

Sub PDF出力()

Dim i As Integer

Dim FileName As String ’保存先フォルダパス&ファイル名
Dim FSO As Object

For i = 1 To Worksheets.Count
Sheets(i).Select
Set FSO = CreateObject(“Scripting.FileSystemObject”)
FileName = ActiveWorkbook.Path & “” & FSO.GetBaseName(ActiveWorkbook.Name) & “-” & i & “.pdf”
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName, Quality:=xlQualityStandard, _
From:=1, To:=1
Set FSO = Nothing
Next i

End Sub

ファイルを開くVBAコードと併用することでたくさんのファイルを一括でPDF出力することも可能です。

以下のVBAコードは任意のフォルダに入っているExcelファイルのすべてのシートについて1ページ目をPDF出力するものです。
「フォルダの中に含まれるファイルを順にPDF出力する」コードの中にPDF化を組み込んでいます。

Sub フォルダの中に含まれるファイルを順にPDF出力する()

Dim FolderName As String ’文字列を入れる変数として「FolderName」を使う
Dim index As Integer ’数字を入れる変数として「index」を使う
Dim FileName As String ’文字列を入れる変数として「FileName」を使う

FolderName = Application.GetOpenFilename ’ダイアログを用いて選択したファイルのパスをFolderNameとする①
If FolderName = “False” Then ’FolderNameが選択されていなければ作業を終了する
Exit Sub
End If
’今のフォルダ名には選択したファイル名含まれているので、ファイル名の部分を切り取る作業。

index = InStrRev(FolderName, “”) ’フォルダ名部分の文字数をカウントする
FolderName = Left(FolderName, index) ’ カウントした文字数までの部分を切り取ってフォルダ名とする
FileName = Dir(FolderName & “*xls*”) ’ フォルダの中に含まれるファイルを取り出す

Do While FileName <> “” ’ファイルがなくなるまで繰り返す
Workbooks.Open FolderName & FileName ’ファイルを開く

PDF出力 ’PDF出力VBAの実行

Workbooks(Workbooks.Count).Saved = True
Workbooks(Workbooks.Count).Close
FileName = Dir()
Loop

End Sub

Private Sub PDF出力()

Dim i As Integer

Dim FileName As String ’保存先フォルダパス&ファイル名
Dim FSO As Object

For i = 1 To Worksheets.Count
Sheets(i).Select
Set FSO = CreateObject(“Scripting.FileSystemObject”)
FileName = ActiveWorkbook.Path & “” & FSO.GetBaseName(ActiveWorkbook.Name) & “-” & i & “.pdf”
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName, Quality:=xlQualityStandard, _
From:=1, To:=1
Set FSO = Nothing
Next i

End Sub

コメント