みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAは請求書などの書類を自動で作成できるのでとっても便利ですよね。
以下の記事から始まるシリーズで初心者向けに請求書を自動で作る方法について解説をしています。
さて、そのような場合、エクセル形式(.xlsxなど)で保存をするのも良いのですが、取引先に送る場合などはPDFで送りたい場合があります。
というのも、エクセル形式だと内容の修正ができちゃいますから、確定した書類などは修正のできないPDFで提出をしたほうが都合が良いんですね。
実は、エクセルVBAではPDF形式での出力も簡単にできちゃいます。
ということで、何回かのシリーズ連載でPDF形式での出力について、色々とお伝えしていきたいと思います。
初回の今回は、エクセルVBAでPDFを出力する最も簡単なプログラムと、PDF出力の際にシート1ページに出力する方法についてお伝えしていきます。
本当に簡単なので、初心者でもすぐにできますよ。
では、行ってみましょう。
請求書をPDF形式で出力する
今回のお題として、このような請求書を考えます。
エクセルで作成した一般的な請求書ですね。
これをPDFで出力するプログラムはこちらです。
Sub outputPDF()
Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201603請求書_株式会社ホゲホゲ御中.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName
…
……たったこれだけです。
超簡単ですね。
変数fileNameは出力するPDFファイルのファイル名です。フルパスで指定するので、ThisWorkbook.Pathを使って請求書ファイルと同じフォルダを指定しています。
もうお分かりだと思いますが、PDF出力の際はシートに対してExportAsFixedFormatメソッドを使って
WorkSheetオブジェクト.ExportAsFixedFormat Type:=xlTypePDF, fileName:=ファイル名
とします。
さて、上記プログラムを実行しますとPDFがフォルダに生成されます。
PDFファイルを開いてみたところがこちらです。
ちなみにですが、同じファイル名のファイルが指定フォルダに存在している場合は上書きになります。
また、同じファイル名が開いている状態のときは「実行時エラー」が出てプログラムは中断します。
PDF出力で2ページに分かれてしまう場合
例えば以下のような品目数が多い請求書があったとします。
これを上記プログラムでPDF出力してみますと…
このように2ページに分かれて出力されてしまいます。
どうすれば良いでしょうか??
シートを1ページにPDF出力する
この場合は、印刷の設定でいう「シートを1ページにPDF出力する」というテクニックを使います。
印刷するとき2ページ以上に分かれてしまうときは、の設定のときに「印刷」→「シートを1ページに印刷」という設定をしますよね。
この設定をVBAプログラムで指定してあげます。
シートのPageSetupでページ数に合わせて印刷の設定
PageSetupオブジェクトというものがあります。
これはシートに対して、印刷関連の設定を行うためのオブジェクトなのですが、設定項目に関するいくつものプロパティを持っています。
例えば、今回の目標としている「1ページに印刷」を設定するためには、印刷時の拡大・縮小率を指定するZoomプロパティ
WorkSheetオブジェクト.PageSetup.Zoom = True または False
を使います。
縦方向を指定ページ数に収めるFitToPagesTallプロパティ、横方向を指定ページ数に収めるFitToPagesWideプロパティ
WorkSheetオブジェクト.PageSetup.FitToPagesTall = ページ数
WorkSheetオブジェクト.PageSetup.FitToPagesWide = ページ数
を使います。これらのプロパティを使うためにはZoomプロパティはFalseに設定する必要があります。
今回は縦も横もともに1ページに収めたいのでプログラムとしては
Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201603請求書_株式会社ホゲホゲ御中.pdf"
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName
となります。
実行結果
上記プログラムを実行して出力されたPDFを見てみますと
このように1ページに収められていることがわかります。
ちょっと左に寄っていますかね…次回以降調整していきましょう。
まとめ
エクセルVBAでPDF出力をする最も簡単なプログラム、そして出力を1ページに収める方法についてお伝えしました。
PageSetupオブジェクトのプロパティは他にもたくさんありまして、様々な設定が可能です。
次回はその中から、水平・垂直方向のページ中央の設定、余白の設定などをお伝えできればと思います。
どうぞお楽しみに!