【エクセルVBA】印刷範囲の設定&PDFで保存

VBA

※本サイトはアフィリエイト広告を利用しています。

「VBAで書類を自動作成した後に、PDFで保存したいです。」
こういうご依頼をよく受けます。
お仕事でよく発生する手順ですね。
本日はこの2点についてコードの紹介をしていこうと思います。

印刷範囲の設定

まずは印刷範囲の設定から。

設定できるものがたくさんあるので、この記事ではよく使いそうなものだけピックアップしてコードに込みこんでいます。
他の設定に関しては下記の公式のページをご参照ください。

PageSetup オブジェクト (Excel)
Office VBA リファレンス トピック

サンプルコード

コードはこちらになります。

Function PrintPDF(Name1 As String, Name2 As String)

   Dim FileName As String
   Dim MyRange As String
   
   
   'PDFファイルの名前と保存先のパスを設定
   FileName = ThisWorkbook.Path & "\請求書\" & Name1 & Name2 & " 様" & ".pdf"
   '印刷したい範囲を設定
   MyRange = "A1:I38"
      
   '印刷レイアウトの設定
   With Worksheets("請求書").PageSetup
       .PrintArea = MyRange   '印刷範囲
       .Zoom = False '拡大/縮小の指定を無しにする
       .FitToPagesWide = 1    '1ページに収める(横)
       .FitToPagesTall = 1    '1ページに収める(縦)
       .CenterHorizontally = True   '真ん中に配置(横)
       .CenterVertically = True   '真ん中に配置(縦)
   End With
   
   Sheets("請求書").ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName

End Function

上記のコードをコピペして、
call PrintPDFで呼び出して使ってください。
今回は請求書の作成を例にしたので、請求先の人の苗字と名前をファイル名に入れるために引数として設定しています。
このあたりは適宜変更してお使いください。

PrintArea

印刷する範囲を指定します。
今回は請求書フォーマットなので行数や列数が変わりません。そのため、”A1:I38″という固定の範囲にしています。
もし行数や列数が変わる場合は、最終行などを取得して印刷範囲の文字列を作成して下さい。

FitToPagesWide , FitToPagesTall

Wide(=幅)やTall(=高さ)を1ページに収めるためのものです。
「横幅だけ1ページに収めて、縦は数ページになっても大丈夫」という場合は注意点がありますので後述します。
縦横1ページに収めるパターンか、横だけ紙の幅に合わせるパターンが実務ではよく発生するかなと思います。

CenterHorizontally , CenterVertically

Horizontally(=横方向)やVertically(=縦方向)を真ん中寄せするためのものです。

注意点

FitToPagesWide , FitToPagesTallの説明で、
「横幅だけ1ページに収めて、縦は数ページになっても大丈夫」という場合は注意点があります
と書いた点の詳細です。
もし、FitToPagesTallの設定を何も書かなかった場合
・縦を1ページに収めるように設定しない
ではなく
・縦のページ設定は何も変更しない
ということになります。
どういうことかというと、ページのレイアウトのところで縦を1ページに設定済みの場合はその設定がそのまま残ります

会社で他の人と共有している資料の場合、誰かが印刷の設定をいじっている可能性があります。
そのため、特にデフォルトの設定から変えないよって言う場合でもデフォルトの設定に戻しておくということをしておいた方が安心です。
デフォルトの設定に戻すには
FitToPagesTall = False
という書き方をします。

Zoom

Zoomしなくていいのになんでわざわざ「Zoom = False」が入っているのかというのも、上の注意点の説明と関係しています。
もし既に「拡大/縮小」の設定が100%以外の数字になっていた場合、そちらの設定が優先されてしまってFitToPagesWide , FitToPagesTallが無効になってしまうからです。
FitToPagesWide , FitToPagesTallを使いたい場合は「Zoom = False」を入れておくのをオススメします。

PDFで保存

ExportAsFixedFormatを使ってPDFにして保存。
ファイル名(保存先のパスも含んだファイル名)とファイル形式を設定するだけで、簡単にPDFが作れちゃいます。
めちゃくちゃよく使うので覚えておくと便利です。

動画で解説

【エクセルVBA】印刷設定& PDFに保存

こちらの動画で実際に実行しながら解説をしています。
注意点の内容とか、「読んだけど何言ってるかわかんないよ!」という場合は動画見てもらえばわかりやすいので是非。

この記事がどなたかの参考になれば嬉しいです。

お問い合わせやお仕事のご依頼はお問い合わせフォームからご連絡お願いします。
お問い合わせフォーム

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば50,000円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば10,000円ほどから承ります。

VBA
スポンサーリンク
スポンサーリンク
りこをフォローする
エクセルVBAの寺子屋

コメント

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