VBA(マクロ)でもExcelデータをPDFに変換できる
Excelで用意されたデータは.xlsx形式のまま保存される事もありますが2次加工が入る事もあります。
別のAppに転用されたり紙に印刷されたりPDF化など用途は多岐にわたります。
複数の2次加工先の中からPDFにフォーカスをあてる事にします。
PDFについても質問をいただく機会が多いです。皆様改善したいという思いがあるようです。
請求書や最近話題のインボイス制度でもPDFへの変換はキーになる作業の1つです。
注目されている要素でもありますので少し厚みを持って記事を用意する事にしました。
初回となる今回の記事では簡単にデータをPDFに変換するためのコードを紹介します。(ボタンでコピペ可)
加えてExcelデータのPDF化を担当しているメソッドについて掘り下げて解説をしています。
使用するメソッドは1つなのですがパラメータが非常に多いです。よって最初にしっかり解説しておきます。
シリーズが進むにしたがってより実務に近い具体的なコードを紹介していきますので期待してください。
関連記事
PDFについてはシリーズ化します。記事を複数用意します。
次の記事はワークシートの一部を範囲指定してPDFファイルを出力する方法を紹介します。
ExcelはPDFで出力できる
既に多くの人に認知されていますよね。ExcelからPDFを発行する事ができます。
PDFについて多くの方は分かっていると思いますがフルネームはご存知でしょうか?
私は自分で調べるまで知りませんでした。Print・・・と思ったら早速間違えてましたね。
PDFはPortable Document Formatの略です。詳細は引用先をご覧ください。
Portable Document Format(ポータブル・ドキュメント・フォーマット、PDF)は、デジタルデバイス上でアプリケーションやOS、ハードウェアに依存せず文章や図版を表示するために開発され、ISO 32000で国際標準化された電子文書ファイル形式である。
Wikipedia:Portable Document Format
手作業の際はファイルタブ→「名前を付けて保存」でPDFを発行する事ができます。
拡張子を選ぶ際に「*.pdf」を選択するとデータがPDFで保存されます。
毎回データの保存時にファイルの拡張子を・・・というのが面倒なのでVBAでできる様にしていきます。
VBAを準備してワークシート上にボタンを用意してあげれば簡単にPDFを発行する事ができる様になります。
コードと解説
サンプルとしてコードを紹介してから解説していきます。
コード
PDFへの変換だけを考えるのであればこれだけのコードでExcelからPDFファイルを作る事ができます。
まずは変数wsに対象のワークシートを格納します。
その後ワークシートオブジェクトに紐付くExportAsFixedFormatメソッドを実行します。
対象シートのセルA1を始点にワークシートの文字があるところまでをPDFへ変換します。
(事前にワークシートで印刷範囲が設定されている際は印刷範囲に従いPDFに変換されます)
印刷範囲については後ほどパラメータ毎の解説で追加の説明をしています。
最終的にコードを実行するExcelファイルと同じ環境にsample.pdfが作成されます。
Sub PDF作成()
Dim ws As Worksheet '対象のワークシートを格納するオブジェクト変数
Dim name As String 'ファイル名を格納する変数
Set ws = ActiveSheet 'アクティブシートをオブジェクト変数wsに格納
name = "sample.pdf" 'ファイル名を格納
'PDF発行 パスは本Excelと同じ場所、ファイル名は先程変数に格納したものを使用
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & name
End Sub
解説
コード自体はそんなに難しくはないです。メソッドを1つ使うだけです。
ExportAsFixedFormatというメソッドです。
このメソッドは記憶力が良いのでしょうか・・・非常に多くのパラメータを持つことができます。
全部で10個あります。そうなると一見複雑そうな感じがしてきます。
しかし必須となるパラメータは1番のTypeだけです。よって比較的簡単に使用する事ができます。
早速ExportAsFixedFormatメソッドのパラメータの話に移りましょう。
以下リストをご覧ください。
番号 | パラメータ名 | 説明 |
---|---|---|
1 | Type | xlTypePDFかxlTypeXPSを指定(xlTypePDF一択) |
2 | FileName | 保存先と保存時のファイル名を指定 |
3 | Quality | PDFの品質を指定(2種類から選択) |
4 | IncludeDocProperties | ドキュメントプロパティを含めるのかを指定 |
5 | IgnorePrintAreas | 印刷範囲を指定 |
6 | From | 発行を開始するページ番号を指定 |
7 | To | 発行を終了するページ番号を指定 |
8 | OpenAfterPublish | PDFを確認するのかを指定 |
9 | FixedFormatExtClassPtr | FixedFormatExt クラスへのポインター(内容不明) |
10 | WorkIdentity | 説明が見つかりませんでした(内容不明) |
説明が必要なパラメータを選んで解説していきます。
1_Type
繰返しになりますが1番のTypeだけ必須です。
2種類のキーワード(定数)から選択するのですが実質1択です。xlTypePDFしか使いません。
XPSの解説はここでは省略します。
2_FileName
パスとファイル名を指定します。しかし1番のType以外のパラメータは必須ではないです。
・・・イメージが湧かないですよね。パスとファイル名を指定しないとどうなるのかを説明します。
- パスを指定しない時はカレントディレクトリにPDFが作成されます。
- ファイル名を指定しない時はコードを実行しているExcelデータのファイル名が踏襲されます。
FileNameも指定する事が多いので実質指定するパラメータは2つである事が多いです。
よって今回も2つのパラメータだけ用意したコードを準備した次第です。
5_IgnorePrintAreas
PDFに変換する為の範囲を指定します。
Trueだとワークシートに設定されている印刷範囲を無視して全てのデータをPDF化の対象にします。
その際はExcelが程よい範囲でPDFを生成するので思っている範囲でPDFを作る事ができません。
Falseはその逆でワークシートに設定されている印刷範囲を踏襲します。
おすすめはFalseです。事前にワークシートで印刷範囲を設定しておくのが良いでしょう。
8_OpenAfterPublish
Trueを指定するとPDF発行時にビューワーにファイルが表示されます。
PDFへ変換された時の出来栄えをすぐに確認する事ができます。
おすすめはTrueですがたくさんPDFを生成する時はいちいち見てられないのでFalseにすることもあります。
コード作成時やテスト段階はTrueにしておいて仕様が安定したらFalseにすると良いでしょう。
その他(9番と10番)
9番、10番のパラメータはどんな機能なのか分かりませんでした。
10番に関してはオブジェクトブラウザーには表示されますがMicrosoftのリファレンスには記載が無いです。
パラメータを全部指定する事はまず無い
読んでいただくと気付くのですが「パラメータを全部指定する事はまずない」です。
パラメータの設定方法に正解はありません。状況に応じて選択、ご使用ください。
その他
パラメータ以外の事を少し解説させていただきます。
全体的にコードの量は少ないのですが色々な要素が使われています。
オブジェクト変数やファイルパスの作り方、連結演算子など色々な要素が組み合わせてあります。
文章の中にリンクをセットしておいたので気になる方は見に行ってください。
まとめ
今回紹介したようなコードのまま実務で使う事は少ないかもしれません。
まずは以下内容を知っていただきたくて記事を用意した次第です。
- VBAでもExcelをベースにPDFを用意する事ができる
- ExportAsFixedFormatメソッドの引数が多い
- ExportAsFixedFormatメソッドの引数が多い割には全て使用する機会は少ない
PDFに関しては他にも記事を用意します。その中でもっと具体的な使い方を提示していきます。
シート内の一部をPDFに変換して出力する方法やフォルダを指定してPDFを出力する方法などを用意します。