Excel VBAで指定範囲をPDF印刷するためのマクロ
はじめに
Excelで指定したシートの指定範囲を自動で大量に印刷したい場面に遭遇し、PDF印刷するためのマクロを作ったので備忘録を兼ねてメモします。以下のマクロでは、PDF印刷するシート、印刷範囲、ファイル名の指定が可能です。
PDF印刷するためのマクロ
以下のマクロは、PDF印刷したいシート名とそのPDFファイルの名前を引数として受け取って、指定したフォルダに保存することができます。何かをインストールしないといけないとかはなく、Excel2010以降であれば以下のマクロをコピペして実行するだけで使用できると思います。
なお、以下のマクロではPDF印刷するシートの印刷範囲を「.PrintArea = "A$1:$E$41"」というように、A1からE41の範囲に固定していますが、必要であればこの印刷範囲自体も引数として取得するようにすればいいと思います。
' printSheetがPDF印刷するシート名、customerNameは作成するPDFのファイル名に使う引数
Sub printPDF(ByVal printSheet As String, ByVal customerName As String)
pdfName = printSheet & " for " & customerName '保存するPDFファイルの名前。「&」で文字を連結
ChDir "C:\ExcelPDF\" 'カレントフォルダの指定。ここで指定したフォルダにPDFが保存されます。
fileSaveName = Application.GetSaveAsFilename(pdfName, _
fileFilter:="PDF Files (*.pdf), *.pdf")
If fileSaveName <> False Then
' 印刷設定の指定
With Sheets(printSheet).PageSetup
.Orientation = xlPortrait ' 縦向き印刷
'.Orientation = xlLandscape '横向き印刷
.FitToPagesWide = 1 '横幅を印刷用紙にフィットさせる
.FitToPagesTall = 1 '縦幅を印刷用紙にフィットさせる
.Zoom = False ' 拡大しない
.PrintArea = "A$1:$E$41" '印刷範囲の指定
'.PageSize = xlPaperA4 '印刷用紙サイズの指定
End With
Sheets(printSheet).ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=fileSaveName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End If
MsgBox "PDF File Saved to" & " " & fileSaveName
End Sub
マクロの説明
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」になります。
Sub printTest()
Dim printSheet As String
Dim customerName As String
printSheet = "Sheet1"
customerName = "test"
Call printPDF(printSheet, customerName)
End Sub
'以下は上記に記載のマクロ
Sub printPDF(ByVal printSheet As String, ByVal customerName As String)
'省略
End Sub
2014/6/23追記
こちらにこの記事に載せたマクロを使った応用例をメモしたので必要な方は見てみてください。Excel VBAで別シートへの値挿入とPDF保存を自動化するマクロ