スライドショー

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:\Users\Samurai\Desktop\PDF出力\に請求書.pdfの名前で、PDFを保存するサンプルです。

サンプルコード:

Sub Test()
    'ファイル出力用の定数用意
    Const fileName = "請求書.pdf"                                     'ファイル名
    Const folderPath = "C:\Users\Samurai\Desktop\PDF出力\" 'フォルダパス
    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:\Users\Samurai\Desktop\PDF出力\に請求書_水平方向中央寄せ.pdfの名前で、PDFを保存するサンプルです。

サンプルコード:

Sub Test2()
    'ファイル出力用の定数用意
    Const fileName = "請求書_水平方向中央寄せ.pdf"                  'ファイル名
    Const folderPath = "C:\Users\Samurai\Desktop\PDF出力\" 'フォルダパス
    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:\Users\Samurai\Desktop\PDF出力\マクロの記録で保存.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保存が自動化できると、自動化の幅が広がります。

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説