Excel シートを PDF 形式で保存して、その PDFファイルをメールで送るような場合があると思います。
ほぼ毎回そのようにして使う Excel シートであれば、Excel VBA(マクロ)によって PDF 化の作業を自動化しておくと楽です。
1、Excel シートの PDF 化を手作業で行う場合
まず、Excel シートの PDF 化の作業について説明します。
仮に、次のような Excelシート中で「損益計算書」を作成した後に、PDF 化して顧客にメールで送付する場合を考えてみます。
PDF化した時の印刷範囲を調整しておきましょう。
メニュータブの「表示」から「改プレビュー」を選択して、青線を動かして印刷範囲を調整します。
シートを PDF 化するためには、まずメニュータブの「ファイル」から「名前を付けて保存」を選択します。次に、保存先を選択してから「ファイルの種類」は「PDF(*.pdf)」を選択して保存します。
そこまで面倒な作業でもありませんが、毎回この作業をやるのであれば自動化させておいた方がよいでしょう。
2、ファイルを閉じる時に Excel シートを PDF 化させるコード
さて、Excel ファイルを閉じる時に以下の2つを実行するコードを考えて見ます。
・Excel ファイル自体を上書き保存
・Excel シートを PDF 化して同じフォルダに保存
つまり、Excel ファイルを閉じる時に、そのExcel ファイルの更新を保存しつつ同時にPDF 化するということですね。
コード
コードは VBE を開き(Alt + F11)、ブックモジュールの中の Workbook オブジェクト、BeforeClose イベントプロシージャに記述します。
BeforeClose イベントプロシージャに記述したコードはワークブックを閉じようとして「✖」ボタンを押した時に動作します。
以下にコードを示します。これを PDF 化したい Excelファイル(形式は「.xlsm」にしておく必要あり)の BeforeClose イベントプロシージャに貼り付けて頂ければそのまま使えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim File_Path 'ワークブックのパス' Dim File_Name 'ワークブックのファイル名' File_Path = ThisWorkbook.Path 'このワークブックのパスを取得' File_Name = ActiveSheet.Name 'アクティブなワークシートの名前を取得' Application.DisplayAlerts = False '警告、メッセージが出ないようにする' '★ ↓上書き保存(.xlsm) ★' ThisWorkbook.Save '★ ↓PDF変換(.pdf) ★' Worksheets(File_Name).ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=File_Path & "\" & File_Name & ".pdf" Application.DisplayAlerts = True '警告、メッセージが出るようにする' End Sub |
Excel ファイルを閉じると同じフォルダ内に「損益計算書」シートの PDFファイルが生成されるのが確認できます。
コード説明
さて、上記コードの説明をします。
変数の定義と代入
まずは、ワークブックのパスを表す変数「File_Path」と、ワークブックのファイル名を表す変数「File_Name」を定義し、変数名を代入します。
1 2 3 4 5 |
Dim File_Path 'ワークブックのパス' Dim File_Name 'ワークブックのファイル名' File_Path = ThisWorkbook.Path 'このワークブックのパスを取得' File_Name = ActiveSheet.Name 'アクティブなワークシートの名前を取得' |
Thisworkbook は正にこの VBA コードが記述してあるワークブックのことであり、ThisWorkbook.Path はこの VBA コードが記述してあるワークブックのパスを意味します。
ActiveSheet は今操作対象となっているシート(閉じようとしている)のことであり、ActiveSheet.Name は今操作対象となっているシートの名前(損益計算書)を意味します。
ファイルの上書き保存
1 2 |
'★ ↓上書き保存(.xlsm) ★' ThisWorkbook.Save |
ThisWorkbook.Save により「VBA コードが記述してあるワークブックを上書き保存する」という意味になります。
つまり、今まさに閉じようとしているワークブックを上書き保存することになりますね。
PDF 変換
今回のメインになるる Excel シートを PDF 化するコードです。改行して2行になっています(_ を入力することにより一文を改行できます)。
1 2 3 |
'★ ↓PDF変換(.pdf) ★' Worksheets(File_Name).ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=File_Path & "\" & File_Name & ".pdf" |
ExportAsFixedFormat メソッドを用いています。
Worksheets(File_Name) はこのワークシート(損益計算書)のことを表し、Worksheets(File_Name).ExportAsFixedFormat と記述することで xps 又は pdf 形式で出力できることになります。
その後の Type:=xlTypePDF の記述で pdf 形式を選択していることになります(xlTypeXPS だと xps 形式)。
Filename:=File_Path & “\” & File_Name & “.pdf” の部分では、パスの段階から PDF ファイルの名前を指定しています。
今回の場合、Excel ファイルと同じフォルダの中に、今正に閉じようとしている Excel ファイルのシート名を使って「損益計算書.pdf」のファイル名で保存しています。
警告、メッセージが出ないようにする
1 |
Application.DisplayAlerts = False '警告、メッセージが出ないようにする' |
「Excel ファイルの上書き保存及びシートのPDF化」の前にこのコードを書くことにより。上書きの許可を求める確認のメッセージが出ないようになります。
1 |
Application.DisplayAlerts = True '警告、メッセージが出るようにする' |
「Excel ファイルの上書き保存及びシートのPDF化」の処理が終わった後にこのコードを書くことにより、上書きの許可が出るように元に戻しています(今回のコード場合、以後の処理がありませんのであまり意味はありません)。
3、まとめ
PDF 化の作業を自動化するコードを紹介しました。
毎回同じ Excel シートを PDF 化しているようなケースがあれば役に立つかと思います。
このコードを PDF 化したいシートが入った Excelファイル(形式は「.xlsm」にしておく必要あり)の BeforeClose イベントプロシージャに貼り付けて頂ければそのまま使えますので、是非活用してみて下さい。