VBAでPDFで保存する方法・見た目を調整するコツを解説!


VBAでExcelをPDF化して保存する方法がわからない・・・
具体的な方法だけでなくサンプルコードも知りたいな・・・

日常的にExcelを触っていると、ExcelシートをPDF化してレポート出力するケースはよくありますよね。数件であれば手作業でも済みますが、時期によって数十件、数百件と数が多くなってくると・・・とても大変ですよね。VBAを使って自動化したいけど具体的な方法がわからないという方も多いのではないでしょうか。

こんにちは!フリーランスエンジニア兼テックライターのワキザカです。

この記事では、VBAでExcelシートをPDF化して保存する方法を解説します!

また、ただPDF化して保存する方法だけでなく、PDF化するときのサイズや余白を微調整する方法も解説しているので、ぜひ最後まで見てみてくださいね。

この記事はこんな人のために書きました。

  • VBAでExcelシートのデータをPDF保存する処理を作りたいと思っている人
  • ExcelシートをPDF化する作業を自動化したい人

VBAでPDF保存する方法とは?

はじめに、VBAでPDF保存する方法について解説します。

VBAでPDF保存する方法は、次のとおりです。

VBAでPDF保存する方法:

シート.ExportAsFixedFormat Type:=xlTypePDF, fileName:=ファイル名

これだけだとわかりづらいので、具体的なサンプルをもとに解説しますね。以下はC:UsersSamuraiDesktopPDF出力に請求書.pdfの名前で、PDFを保存するサンプルです。

サンプルコード:

Sub Test()
    'ファイル出力用の定数用意
    Const fileName = "請求書.pdf"                                     'ファイル名
    Const folderPath = "C:UsersSamuraiDesktopPDF出力" 'フォルダパス
    Const filePath = folderPath & fileName                         'ファイルパス
    
    '請求書テンプレートシートのデータを、PDFに保存
    Worksheets("請求書テンプレート").ExportAsFixedFormat Type:=xlTypePDF, fileName:=filePath
End Sub

実行結果:

実行結果

ファイル名、フォルダパス、ファイルパスを定数で用意し、ExportAsFixedFormatでPDFを出力しています。このように、簡単にPDF保存することができます。

ただ保存したときに、次のように本来想定していない列がpdfに含まれてしまい、左に位置がずれてしまうケースもありますよね。


位置がずれてしまうケース

そのため、VBAから位置ずれを解消する方法を覚えておくと便利です!

PDF保存したときに位置がずれをなくす方法

次に、PDF保存したときに位置がずれをなくす方法について解説します。

方法1:事前にExcelの設定で調整する

1つ目が、事前にExcelの設定で調整する方法です。

Excelには、印刷するときに印刷範囲を決める便利なオプションがあります。次のように印刷範囲を事前に選択し、印刷範囲を設定してから印刷処理を実行することで、微調整をすることができるのです。

1. 印刷範囲のセルを選択

印刷範囲のセルを選択

2. ページレイアウト → 印刷範囲の設定を選択

印刷範囲の設定を選択

印刷プレビューで確認すると、次のように印刷範囲を狭めることができました。


印刷範囲を指定した場合

このように、印刷範囲を事前に設定しておくことで、簡単に位置の微調整をすることができます。

方法2:余白調整の設定をVBAに追加する

次に、余白調整の設定をVBAで追加する方法についてです。

余白を調整して中央表示したいときは、PDF化する処理の前に以下のようなコードを書きます。

余白調整して中央寄せ表示する方法:

シート.PageSetup.CenterHorizontally = True/False ‘水平方向中央寄せ
シート.PageSetup.CenterVertically = True/False     ‘垂直方向中央寄せ

今回の場合は、水平方向(横方向)に調整したいため、CenterHorizontallyを設定したサンプルを用意しました。以下はC:UsersSamuraiDesktopPDF出力に請求書_水平方向中央寄せ.pdfの名前で、PDFを保存するサンプルです。

サンプルコード:

Sub Test2()
    'ファイル出力用の定数用意
    Const fileName = "請求書_水平方向中央寄せ.pdf"                  'ファイル名
    Const folderPath = "C:UsersSamuraiDesktopPDF出力" 'フォルダパス
    Const filePath = folderPath & fileName                              'ファイルパス
    
    With Worksheets("請求書テンプレート_中央寄せ")
        '水平方向に余白を調整して中央寄せ
        .PageSetup.CenterHorizontally = True
        
        '請求書テンプレートシートのデータを、PDFに保存
        .ExportAsFixedFormat Type:=xlTypePDF, fileName:=filePath
    End With
    
End Sub

実行結果:

実行結果

Excelのテンプレートシートを使って印刷するときは、印刷範囲を設定する方が調整はしやすいかもしれません。ただ、新しく作ったシートのデータをPDFで保存するようなケースだと・・・VBAで直接微調整できないと厳しいですよね。

そのため、2つの方法があることを覚えておきつつ、使い分けていくのがおすすめです!

Excel操作はわかってもVBAがわからないときの対処方法

ここまで、VBAでPDF保存する方法について解説してきました。

ただ、「ExportAsFixedFormat」がわからないときはVBAでPDF出力の処理を書くのが難しいですよね。ExcelでPDF化する操作はわかっているのに、VBAで書く方法がわからない・・・というときに便利なのが、マクロの記録です。

マクロの記録とは、Excelの操作をVBAに自動変換してくれる機能です。


■マクロの記録の操作の流れ
マクロの記録を開始

PDF形式で名前を付けて保存する操作を実行

マクロの記録を停止

の流れでVBAのコードを自動で出力すると、次のようなコードが自動で生成されます。

自動生成したコード:

Sub PDF保存()
'
' PDF保存 Macro
'

'
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
        "C:UsersSamuraiDesktopPDF出力マクロの記録で保存.pdf" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
End Sub

Type、fileName以外にもいくつか指定している項目はありますが、「ExportAsFixedFormat」を使っていることがVBAのコードを見て知ることができますよね。手がかりがあればググるのも楽になるため、VBAのコードを理解する速度も上がるはずです。

このように、マクロの記録を使ってExcelの操作をVBA化してコードを見るのは、VBA学習速度を高めるうえでとてもおすすめです!

マクロの記録の使い方については以下で詳しく解説しているので、興味がある方は見てみてくださいね!

【ExcelVBA入門】マクロの記録を使って簡単にマクロを作る方法とは
更新日 : 2019年9月1日

まとめ

今回は、VBAでPDF保存する方法について解説しました。

PDF保存が自動化できると、自動化の幅が広がります。

ぜひ、使ってみてくださいね!

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

Sanshiro Wakizaka

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!

侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー