Excel VBA

エクセルVBAでPDFファイルを作成する方法を紹介

仕事でよく使うファイルのひとつに「PDF」があります。

請求書、領収書、お知らせ・・・さまざまな場面で使います。

エクセルやワードなどのOfficeソフトを使ってPDFを作成している方も多いと思います。

便利なPDFですが、作成するのに少し手間がかかるのがデメリット。

今回は、エクセルからPDFを簡単に作成する方法を紹介します。

一回あたりの効果は少ないですが、毎日行う作業なのでかなりの時短につながると思います。

こんな方におすすめ

  • エクセルVBAを使い始めたい方
  • PDF作成作業をラクにしたい

エクセルVBAでPDFを作成するコードはこちら

早速PDFを作成するプログラムのコードを紹介します。

Sub pdf保存1()
Dim filePath As String, fileName As String

'【1】ファイル名、保存先のパスを指定
'****ファイル名*******************
fileName = "請求書" & ".pdf"
'********************************

'***ファイルパス******************
filePath = ThisWorkbook.Path
'********************************

'【2】PDFファイルとして保存
ThisWorkbook.Worksheets("請求書").ExportAsFixedFormat _
                                  Type:=xlTypePDF, _
                                  fileName:= filePath & "\" & fileName

End Sub


このプログラムの前提

このプログラムを動かすとPDFを作成することができますが、準備が必要です。

  1. PDFファイル作成のために、【請求書】という名前のシートを作成する。

※【2】のコードで「請求書という名前のシートをPDFにする」というコードが書かれているためです。
 (ThisWorkbook.Worksheets("     ")・・” ”の間にPDFにしたいシート名を入力することで好きなシートに変更できます。

・・当然ですが、請求書のフォームの作成は必要です。


このプログラムを実行すると、請求書PDFが作成できます。


コードの解説

プログラムのコードの解説をします。

まずは、今回のプログラムで行っている処理の順番を紹介します。

このプログラムで行っていること

  1. 変数の宣言
  2. ファイル名・フォルダパスの指定
  3. PDFファイルとして保存


最初はこちらのコードです。

Dim filePath As String, fileName As String

ここでは、変数の宣言をしています。
(filePath、fileNameという名前の変数です)

この変数の中にそれぞれ「ファイルの保存先」と「ファイル名」のデータを入れていきます。


次はこちらのコードです。

fileName = "請求書" & ".pdf"

先ほど作った変数【fileName】の中に「作成するPDFファイルのファイル名」を入れていきます。

ここでは「請求書.pdf」というファイル名にしています。
(このファイル名は変更できます。この後紹介するコードのカスタマイズでは、発行先ごとにファイル名を変更する方法も紹介しています)


次のコード

filePath = ThisWorkbook.Path

先ほど作った変数【filePath】の中に「保存したいファイルの場所」を入れていきます。

ここでは、エクセルVBAプログラムの「エクセルファイル」と同じ場所に指定しています。

最後はこのコード

ThisWorkbook.Worksheets("請求書").ExportAsFixedFormat _
                                  Type:=xlTypePDF, _
                                  fileName:= filePath & "\" & fileName

このコードは、PDFに出力するためのコードです。

  1. 「請求書」という名前のエクセルシートを保存する。
  2. 保存形式は「PDF」
  3. 保存場所は、変数filePathの中身と(ファイル名も続けて指定するので)fileNameの中身

という項目をそれぞれ指定しています。


コードのカスタマイズもできる

今回紹介したコードはカスタマイズができます。

カスタマイズできること

  • 保存ファイル名を自由に変更


実際にPDFファイルを保存する時には便利なワザなので、興味があれば使ってみてください。

PDFファイル名に得意先名を付ける場合

こちらのコードを少し変更することで、発行する得意先ごとにファイル名を変更できます。

'変更前のコード
fileName = "請求書" & ".pdf"


請求書を作成するエクセルシートのA8セルに得意先名がある場合です。


コードはこのように書きます。
※「ファイル名はここ」という場所のコードを変更しました。

Sub pdf保存1()
Dim filePath As String, fileName As String, saveName As String
'****ファイル名はここ************
fileName = Worksheets("請求書").Range("A8") & ".pdf"
'********************************

'***ファイルパス*****************
filePath = ThisWorkbook.Path
'********************************

'***保存名***********************
saveName = filePath & "\" & fileName
'********************************

ThisWorkbook.Worksheets("請求書").ExportAsFixedFormat _
                                  Type:=xlTypePDF, _
                                  fileName:=saveName

End Sub


コードの意味は「請求書という名前のシートのA8セルの値」と「.pdf」を合わせたファイル名、です。

fileName = Worksheets("請求書").Range("A8") & ".pdf"


作成日を自動的に付けたい場合

作成日がない場合、PDFファイルの管理がしにくくなってしまいます。

こちらのコードを使えば、ファイル名に作成日を入れることができます。

fileName = Format(Now, "YYMMDD") & "_" & Worksheets("請求書").Range("A8") & ".pdf"


このコードを書くと、ファイル名に作成月が入るようになります。
(2022年2月10日に作成した場合です)


コード全体はこちらです。

Sub pdf保存1()

Dim filePath As String, fileName As String, saveName As String
'****ファイル名はここ************
fileName = Format(Now, "YYMMDD") & "_" & Worksheets("請求書").Range("A8") & ".pdf"
'********************************

'***ファイルパス*****************
filePath = ThisWorkbook.Path
'********************************

'***保存名***********************
saveName = filePath & "\" & fileName
'********************************

ThisWorkbook.Worksheets("請求書").ExportAsFixedFormat _
                                  Type:=xlTypePDF, _
                                  fileName:=saveName

End Sub


PDFファイル作成後に名前を変更する必要がないようにしておくと、業務効率化につながります。

現在時刻の取得方法はこちらの記事で紹介しています。

こちらもCHECK

タイトル画像
【現在時刻取得】Format(Now,"YYMMDDHHMM")の活用法を紹介【Excel VBA】

エクセルVBAを使っていると「現在時刻の取得」が必要なことがあります。 そんな時に便利なのがFormat関数です。その反面、使い道が分かりにくいこともあるので、今回はFormat関数(Nowを使った現 ...

続きを見る


あとがき

今回は、エクセルVBAでPDFを作成する方法を紹介しました。

PDFファイルを作成する場面はたくさんあるので、ファイルの名前に規則性があれば、さらに効率的に作業が進められます。

普段PDFを作成するためのエクセルテンプレートがある場合は、今回紹介したコードを使うことで「PDF保存」の時間を短縮できます。
一回当たりの業務改善効果は少ないかもしれませんが、

-Excel VBA
-, , ,