Excelで作成した書類(請求書や勤務予定表、スケジュール等)をPDFに変換して出力したいことは多いかと思います。
VBAを使えば、印刷範囲を設定してボタン一つでPDFで出力することができます。
この記事では、VBAでPDFファイルに出力する方法を紹介します。

PDFを出力する方法
VBAでPDFを出力するコードは次の通りです。
シート名.ExportAsFixedFormat Type:=xlTypePDF, Filename:=保存先ファイル名
シート名は、「ActiveSheet」や「Sheets(“請求書”)」など指定できます。
保存先ファイル名は、「C:Users\username\・・・\ファイル名.pdf」といった具体的なファイル名を含めた保存先までの文字列を指定します。
実務で使えるレベルのコードは以下の通りになります。
Sub PDF保存()
Dim FName As String
'保存先を決める
FName = Application.GetSaveAsFilename(FileFilter:="PDF,*.pdf")
'キャンセルが押されたら抜ける
If FName = "False" Then
Exit Sub
End If
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FName
MsgBox "PDFに保存しました。"
End Sub
宣言した「FName」にApplication.GetSaveAsFilenameメソッドを使って保存先を決めます。
9~11行目は、キャンセルが押されたときのエラー対策で、キャンセルが押されたら終了します。
PDFが保存先に出力され、「PDFに保存しました。」のメッセージが表示されて終了します。
PDF出力と合わせて使いたいコード
先ほどご紹介したコードでもそのまま使えますが、もうひと手間加えるだけでもっと便利にPDF保存することができます。

私が実務でよく使っている便利技を2つご紹介しますね。
【便利技1】ファイル名を事前に決めてPDFに出力する
Application.GetSaveAsFilenameメソッドでファイル名を入力するのって意外と面倒ですよね?
毎月ルーティーンで出力する場合などは、下記のコードを追加するだけで簡単にファイル名を入力することができます。
Dim FName As String
'保存先を決める
FName = "請求書 " & [B6] & " " & [A2] & " " & [F36]
FName = Application.GetSaveAsFilename(FName, FileFilter:="PDF,*.pdf")


■実行結果


変数宣言とApplication.GetSaveAsFilenameメソッドの間に下記コードを追記しています。
FName = "請求書 " & [B6] & " " & [A2] & " " & [F36]
このコードでファイル名を事前に決め、Application.GetSaveAsFilenameメソッドにFNameを追記することで、ファイル名が入力済みの状態にすることができます。
FName = Application.GetSaveAsFilename(FName, FileFilter:="PDF,*.pdf")



名前を確認して、保存ボタンを押すだけでいいのでとても便利です。
年月や請求先、金額をファイル名に入れておくと、ファイルを開かなくてもある程度中身が推測できる点もおすすめです。
【便利技2】PDF保存先をエクセルファイルと同じフォルダにする
Application.GetSaveAsFilenameメソッドは、デフォルトだとドキュメントフォルダだったり、前回指定したフォルダが最初に表示されます。
そこで、最初に開かれるフォルダをエクセルがあるフォルダと同じフォルダにする方法をご紹介します。
Dim FName As String
'初期フォルダをブックと同じフォルダを指定
ChDir ThisWorkbook.Path
'保存先を決める
FName = Application.GetSaveAsFilename(FileFilter:="PDF,*.pdf")
■実行結果


変数宣言とApplication.GetSaveAsFilenameメソッドの間に下記コードを追記しています。
ChDir ThisWorkbook.Path
このコードを追記するだけで、初期フォルダをブックと同じフォルダにすることができます。



ほんのひと手間ですが、毎回保存先を変更する必要がなくなりますので、とてもおすすめです。
直接印刷せずに一度PDFに保存してから印刷するメリット
Excelで作成したシート(書類)をそのまま印刷するマクロを組まれている方もいるかと思います。
以下のコードで、表示されているシートを印刷することができます。
ActiveSheet.PrintOut
しかし、私の場合は一度PDFに保存してからPDFファイルを印刷することが多いです。
PDFに出力するのは次のようなメリットがあります。
- 印刷した書類を紛失した時に、PDFからすぐに印刷できる。
- PDFで保存しておけば、Excelを再作成する必要がなくなる。
- PDFファイルが履歴として残る。
PDFに保存して印刷するためひと手間増えますが、メリットが大きいので、印刷や印刷プレビューの代わりにPDFに保存する場合も多くあります。



私の場合、印刷とPDF保存を同時に使うこともあります。印刷履歴代わりに使えるのでとても便利です。
まとめ
この記事では、ExcelをPDFファイルに出力する方法についてご紹介しました。
便利技も含めたコードは以下の通りです。
Sub PDF保存()
Dim FName As String
'初期フォルダをブックと同じフォルダを指定
ChDir ThisWorkbook.Path
'保存先を決める
FName = "請求書 " & [B6] & " " & [A2] & " " & [F36]
FName = Application.GetSaveAsFilename(FName, FileFilter:="PDF,*.pdf")
'キャンセルが押されたら抜ける
If FName = "False" Then
Exit Sub
End If
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FName
MsgBox "PDFに保存しました。"
End Sub
コピーして一部を変更すればそのまま使えますので、ぜひ活用してみて下さい。
コメント