初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム


printer

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAは請求書などの書類を自動で作成できるのでとっても便利ですよね。

以下の記事から始まるシリーズで初心者向けに請求書を自動で作る方法について解説をしています。

【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
初心者向けVBAの実用的な使い方について、請求データ一覧から請求書を自動で作成するを目標に進めます。初回はWorksheetオブジェクト、Rangeオブジェクトと、セルの値の操作についてお伝えします。

さて、そのような場合、エクセル形式(.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ファイルを開いてみたところがこちらです。

エクセルVBAで出力したPDFの請求書

ちなみにですが、同じファイル名のファイルが指定フォルダに存在している場合は上書きになります。

また、同じファイル名が開いている状態のときは「実行時エラー」が出てプログラムは中断します。

PDF出力で2ページに分かれてしまう場合

例えば以下のような品目数が多い請求書があったとします。

エクセルで作成した縦長の請求書

これを上記プログラムでPDF出力してみますと…

2ページに分かれてしまったPDFの請求書

このように2ページに分かれて出力されてしまいます。

どうすれば良いでしょうか??

シートを1ページにPDF出力する

この場合は、印刷の設定でいう「シートを1ページにPDF出力する」というテクニックを使います。

印刷するとき2ページ以上に分かれてしまうときは、の設定のときに「印刷」→「シートを1ページに印刷」という設定をしますよね。

エクセルでシートを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を見てみますと

エクセルVBAで1ページに収めて出力したPDF

このように1ページに収められていることがわかります。

ちょっと左に寄っていますかね…次回以降調整していきましょう。

まとめ

エクセルVBAでPDF出力をする最も簡単なプログラム、そして出力を1ページに収める方法についてお伝えしました。

PageSetupオブジェクトのプロパティは他にもたくさんありまして、様々な設定が可能です。

次回はその中から、水平・垂直方向のページ中央の設定、余白の設定などをお伝えできればと思います。

エクセルVBAで印刷時のページ中央配置と余白を設定する
エクセルVBAでPageSetupオブジェクトを使って印刷設定をページ中央配置にする方法、また上下左右のマージンを設定する方法についてお伝えします。また印刷プレビューの表示方法も紹介します。

どうぞお楽しみに!

連載目次:エクセルVBAでPDF出力と色々な印刷設定

エクセルで見積書や請求書などの帳票を作成する場合、印刷やPDF出力したいときがありますよね。このシリーズでは印刷やPDF出力をする方法、またその際の様々な設定やテクニックについてお伝えします。
  1. 初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム
  2. エクセルVBAで印刷時のページ中央配置と余白を設定する
  3. エクセルVBAで印刷範囲の設定をする方法とクリアをする方法
  4. エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
  5. エクセルVBAで全てのシートを一つのPDFにまとめて出力する方法
  6. エクセルVBAで一部のワークシートのみ選択してPDFで出力する方法

タイトルとURLをコピーしました