はじめに
こんにちは。早速ですが、皆さんはExcelのシートをPDFで出力したい場面ってありますか?
PDFとして出力するときの流れを思い浮かべてみると、PDF化する対象が1つのシートだったら簡単に終わりますよね。
しかし、複数シートを分けてPDF化する、PDF化したいExcelシートが大量にあるなど、1つ1つ手作業でやっているとさすがに辛い場合もあると思います。
というわけで、今回はそんな処理をVBAによって自動化する方法を書いていきます。
手動でPDF出力する方法
まずは自動化前後比較のために、普段手動でPDFファイルを作成する手順を確認しておきます。
ここでは以下のようなExcelシートをPDFファイルとして出力する必要がある想定でやってみます。
まずは画面左上の「ファイル」タブをクリックします。
次に「エクスポート」を選択します。
「PDF/XPSの作成」をクリックします。
PDFファイルを保存するフォルダを選択し、ファイル名を入力して「発行」をクリックします。
以上でPDF化は完了です。1つのファイルであればすぐにできますが、
やはり多くのファイルについてこれを繰り返すのは時間がもったいないですし、単純作業の繰り返しなのでモチベーションも上がりませんよね。
というわけで、自動化処理を組んでいきましょう。
自動化処理の実行イメージ
VBAのコードの前に、今回作成する処理を動作させた際の使用イメージを記載します。
この記事のコードを実装すると、下のような自動化処理ができるようになります。
今回PDF化するExcelファイルは例として以下のようなものを用意しました。
表が記載されたシートが3枚あり、それぞれを独立したPDFファイルとして保存したいという想定です。
PDF化したい対象のExcelファイルを任意のフォルダ(ここではC:\temp\input)に配置しておきます。
ここでは対象ファイルを適当なファイル名で10個配置しています。
PDF化したファイルを保存するフォルダ(ここではC:\temp\output)を作成しておきます。
マクロが保存されているシートを開き、B1セルに「C:\temp\input」、B2セルに「C:\temp\output」をそれぞれ入力し、
「PDF出力実行」を押下します。
処理が完了すると、「Complete!」というメッセージボックスが表示されます。
B2セルで指定したoutputフォルダを見てみると、PDFファイルができあがっています。
出力されたファイルを開いてみると、問題なくPDF化されていることがわかります。
VBAの環境設定
マクロを実行する前に以下をやっておきましょう。
これをやらないとマクロを実行した際に「Dim fso As FileSystemObject」の部分で
「コンパイルエラー:ユーザ定義型は定義されていません。」と出てエラーになります。
VBエディタの画面から「ツール」タブの「参照設定」をクリックします。
「Microsoft Scripting Runtime」にチェックを入れてOKを押下します。
VBAによる自動化処理作成
ここからは自動化するためのVBAを組んでいきます。
まずは「pdf_conv.xlsm」というマクロ実行用のExcelシートを作成し、このファイルにマクロのコードを記述していきます。
また、上記のExcelファイルに「operation」シートを作成し、ここに編集するファイルの配置場所などを記載します。
処理の流れとしては「PDF出力実行」ボタンを押下すると、B1セルに入力されたフォルダに配置されているExcelファイルを取り込み、
B2セルに入力されているフォルダにPDFとして保存するようにします。
作成したコードは以下です。
Option Explicit Sub convertToPDF() Dim targetBook As Workbook 'PDF出力対象ブック Dim operationSheet As Worksheet Dim targetDevSheet As Worksheet, targetTestSheet As Worksheet, targetProSheet As Worksheet 'PDF出力対象シート Dim inputFolderPath As String, outputFolderPath As String Dim inputFileName As String Dim outputDevFilename As String, outputTestFilename As String, outputProFilename As String Dim prefixDev As String, prefixTest As String, prefixPro As String Dim fso As FileSystemObject Dim files As files, f As File Application.DisplayAlerts = False Application.ScreenUpdating = False Set operationSheet = ThisWorkbook.Worksheets("operation") inputFolderPath = operationSheet.Range("B1").Value outputFolderPath = operationSheet.Range("B2").Value prefixDev = "dev" prefixTest = "test" prefixPro = "pro" Set fso = CreateObject("Scripting.FileSystemObject") Set files = fso.GetFolder(inputFolderPath + "\").files For Each f In files Set targetBook = Workbooks.Open(f) Set targetDevSheet = targetBook.Worksheets("dev") Set targetTestSheet = targetBook.Worksheets("test") Set targetProSheet = targetBook.Worksheets("pro") inputFileName = Replace(f.Name, ".xlsx", "") outputDevFilename = outputFolderPath + "\" + prefixDev + inputFileName + ".pdf" outputTestFilename = outputFolderPath + "\" + prefixTest + inputFileName + ".pdf" outputProFilename = outputFolderPath + "\" + prefixPro + inputFileName + ".pdf" 'PDF出力操作 targetDevSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=outputDevFilename targetTestSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=outputTestFilename targetProSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=outputProFilename targetBook.Close Next f MsgBox "Complete!", vbInformation End Sub
実際にPDF化処理をしているのは最後の方の「ExportAsFixedFormat Type:=xlTypePDF, Filename:=xxxxxx」の部分のみですが、
その前にファイルを開いてシートを読み取る操作や、出力するPDFファイルの名前を編集する操作などが含まれています。
実行ボタンへのマクロ割り当て
このコードを作成後、あらかじめ用意した「PDF出力実行」ボタンにマクロを割り当てておきましょう。
マクロを割り当てたい図形を右クリックし、「マクロの登録」を選択します。
作成したマクロを選択し、「OK」を押下します。
これで「PDF出力実行」ボタンをクリックするとマクロが実行されるようになりました。
おわりに
今回は以上で終わりです。
1つ1つ手作業で実行していたPDF化の操作を自動化できました。
VBAの処理も組み合わせて使うと様々な処理ができるので、今後も思いついたらどんどん書いていきます。
最後まで読んでいただきありがとうございました。