適材適所

PowerShellやVBAなどプログラミング系の話多めで

【Excel VBA】色々PDFで出力する

今では当たり前になっているPDF。テレワークが増えて電子帳票の重要性が増している現在、PDF無しでパソコン仕事はできません。

Excel VBAでもPDFへの出力機能が標準で備わっています。

PDFとは「Portable Document Format」の略で、どのパソコンで開いても同じように見える、いわば「電子的な紙」のようなものです。

PDFを開くためには専用のビューワーが必要です。なぜかというと、PDFファイルの中身は命令の集まりで、ビューワーはそれを忠実に実行してレンダリングしています。

PDFはAdobe社が開発したもので、ビューワーなどもAdobe AcrobatなどのAdobe社製のものが広く普及しています。

しかし、その仕様書は公開されており、サードパーティー製のビューワーや編集ソフトも作られています。

仕様書が公開されているということはめちゃくちゃ本気を出せば1からPDFファイルを作成することも可能ということです。

私は諦めましたが(いつかまたチャレンジしたい・・・)。

話が長くなりましたが、Excel VBAを使えば、1からPDFを作成する必要はありません。

というわけでExcel VBAでPDFを作成する方法をについて書いてみようと思います。

ExportAsFixedFormatメソッド

恐らくワークシート単位でのPDF出力が一番よく使われるのではないかと思います。

WorkSheetオブジェクトには、しっかりとExportAsFixedFormatメソッドがあります。

このメソッドを使うことで、ワークシートをPDFにすることができます。

実はこのExportAsFixedFormatメソッドですがWorkSheetオブジェクト以外にもRangeオブジェクト、Workbookオブジェクト、そしてChartオブジェクトに実装されています。しかも使い方は全部同じです。

Rangeオブジェクトで使用すると、Rangeオブジェクトの範囲が印刷されます。

Workbookオブジェクトで使用すると、全てのワークシートが印刷されます。

Chartオブジェクトで使用すると、該当のグラフが印刷されます。

詳細な使い方は(マイクロソフトのドキュメント)https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.exportasfixedformatを見ていただくとして、簡単な一番単純かつ、多分一番使用頻度の高い使い方を書いておきます。

 
  'シートをPDFに。事前に印刷範囲を指定しておくといいですね。
Worksheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\users\user\desktop\sheet.pdf"
'セル範囲をPDFに。あまり出番はない・・・かも?
Range("A1").ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\users\user\desktop\range.pdf"
'ブック全体をPDFに。事前に印刷範囲を指定しておくといいですね。
ThisWorkbook.ExportAsFixedFormat xlTypePDF, Filename:="C:\users\user\desktop\book.pdf"
'グラフ(ここではアクティブなグラフ)をPDFに。
ActiveChart.ExportAsFixedFormat xlTypePDF, Filename:="C:\users\user\desktop\chart.pdf"

補足

引数はどれも同じで、使い方も同じです。

ExportAsFixedFormatメソッドを使用すると、ファイルが問答無用で上書きされるようです。しかし、同名のファイルを開いている場合は保存に失敗してしまいます。

また、Filenameについてはフルパスで保存先のパスとファイル名を指定する必要があります。何も指定しない場合は、Documentフォルダに、実行したExcelファイルと同じ名前(拡張子はpdf)で保存されるようです。

終わりに

ExportAsFixedFormatを使えば、Excelで作った書類を簡単にPDFにすることができますね。

ちなみに私は、定例で作成しなくてはならない帳票をExcelで作成し、これを使ってPDF形式で出力しています。

これからますます使われるであろう、PDF。

もし、手作業でPDFに出力されているものがありましたら、ExportAsFixedFormatを使って自動化しましょう。

というわけで、ここまでお読みいただき、ありがとうございました。