Excel VBAで指定範囲をPDF印刷するためのマクロ

はじめに
Excelで指定したシートの指定範囲を自動で大量に印刷したい場面に遭遇し、PDF印刷するためのマクロを作ったので備忘録を兼ねてメモします。以下のマクロでは、PDF印刷するシート、印刷範囲、ファイル名の指定が可能です。
PDF印刷するためのマクロ
以下のマクロは、PDF印刷したいシート名とそのPDFファイルの名前を引数として受け取って、指定したフォルダに保存することができます。何かをインストールしないといけないとかはなく、Excel2010以降であれば以下のマクロをコピペして実行するだけで使用できると思います。
なお、以下のマクロではPDF印刷するシートの印刷範囲を「.PrintArea = "A$1:$E$41"」というように、A1からE41の範囲に固定していますが、必要であればこの印刷範囲自体も引数として取得するようにすればいいと思います。
マクロの説明
1行目:Sub printPDF(ByVal printSheet As String, ByVal customerName As String)
「printSheet」がPDF印刷するシート名です。また、上記では、PDFファイル名に使うために「customerName」という引数を指定していますが、これは私の用途で必要だったので指定しているだけです。
4行目:pdfName
保存するPDFのファイル名を指定しています。VBAでは文字列の結合に「&」を使います。上記の場合、例えば変数printSheetに「PDFfile」、変数customerNameに「virtualiment」がそれぞれ格納されていた場合は、「PDFfile for virtualiment」というPDFファイルが作成されます。作成される場所は次の行にある「Chdir」で指定できます。
6行目:ChDir
これはカレントフォルダを指定しています。ここで指定したフォルダにPDFが作成されます。以下参照。 上記のコードだとCドライブ直下の「ExcelPDF」というフォルダに保存されます。
ChDirステートメント | Office TANAKA
14行目〜23行目:With Sheets(printSheet).PageSetup
行目から行目では、With構文を使って、PDF印刷のオプションを指定しています。With構文については下記がわかりやすく参考になりました。また、ここで指定しているオプションの意味については上記のコメントの通りです。
Withって何ですか? | Office TANAKA
25行目:Sheets(printSheet).ExportAsFixedFormat Type:=xlTypePDF, _ ...
この行で印刷を実行しています。ここでも印刷に関するパラメータをいくつか指定しています。指定できるパラメータと内容については以下を参照して頂ければと思います。また、この行を1行で書くと非常に長くなり見難いので、継続行である「_」(アンダースコア)でつないで複数行に分けて記述しています。VBAにおける継続行とアンダースコアについては以下が参考になりました。
Worksheet.ExportAsFixedFormat メソッド | Microsoft Developer Network 継続行の書き方 | 超やさしいVB2012文法
使用例
簡素過ぎて使用例というほどのものではないですが、以下が一番簡単な使い方かと思います。これだけでは実用性はないですが、これを基にいろいろできると思います。以下のマクロをExcelのVisual Basic Editorに貼り付けて実行すれば、「Sheet1」の「A1:E41」の範囲のPDFが作成されます。作成されるPDFの名前は「Sheet1 for test」になります。
2014/6/23追記
こちらにこの記事に載せたマクロを使った応用例をメモしたので必要な方は見てみてください。Excel VBAで別シートへの値挿入とPDF保存を自動化するマクロ
開発アプリ
