「印刷ボタンを押すたびに毎回同じ設定をやり直す」を終わらせる5本
タグ:
VBAExcel印刷帳票業務効率化
投稿先: Qiita
印刷まわりだけ、なぜか自動化を後回しにしていた
Excelマクロで自動化を進めていく中で、印刷・帳票まわりだけは意外と手をつけていない人が多いのではないでしょうか。データ処理や集計は真っ先にマクロ化するのに、「印刷範囲を選択してPage Layoutで確認して印刷」という一連の作業は、毎回手作業で繰り返しがちです。
ここまで読み進めているということは、あなたも印刷まわりの地味な繰り返し作業に、一度は面倒くささを感じたことがあるはずです。この記事では、印刷・帳票まわりの定型作業をボタン化する5本のマクロを、実際のコードとともに紹介します。
1. 選択範囲をそのまま印刷範囲にする
Sub SetPrintArea()
Dim ws As Worksheet
Dim printArea As String
On Error GoTo ErrorHandler
If TypeName(Selection) <> "Range" Then
MsgBox "セル範囲を選択してください。", vbExclamation
Exit Sub
End If
Set ws = ActiveSheet
printArea = Selection.Address
ws.PageSetup.PrintArea = printArea
MsgBox "印刷範囲を設定しました: " & printArea, vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub
セルを選択してから実行するだけで、その範囲がそのまま印刷範囲になります。ページ設定ダイアログを開いて印刷範囲を手入力する手間がなくなります。
2. 印刷範囲をリセットする
Sub ClearPrintArea()
Dim ws As Worksheet
On Error GoTo ErrorHandler
Set ws = ActiveSheet
If ws.PageSetup.PrintArea = "" Then
MsgBox "印刷範囲は設定されていません。", vbInformation
Exit Sub
End If
ws.PageSetup.PrintArea = ""
MsgBox "印刷範囲をクリアしました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub
SetPrintAreaとセットで用意しておくと、「前回の印刷範囲が残っていて意図しない範囲が印刷される」という事故を防げます。既に印刷範囲が空の場合はその旨をメッセージで返すだけにしているので、誤操作の心配もありません。
3. ヘッダー/フッターを対話式で設定する
Sub AddHeaderFooter()
Dim ws As Worksheet
Dim sheetName As String
On Error GoTo ErrorHandler
sheetName = InputBox("ヘッダー/フッターを設定するシート名を入力:", "ヘッダー/フッター設定", ActiveSheet.Name)
If sheetName = "" Then Exit Sub
On Error Resume Next
Set ws = Worksheets(sheetName)
On Error GoTo ErrorHandler
If ws Is Nothing Then
MsgBox "「" & sheetName & "」は存在しません。", vbExclamation
Exit Sub
End If
' 左/中央/右のヘッダー・フッターをInputBoxで順に取得し反映
' (詳細はサイト本体のコード参照)
MsgBox "「" & sheetName & "」にヘッダー/フッターを設定しました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub
社内帳票では「左に会社名、中央にタイトル、右にページ番号」のような型が決まっていることが多いです。毎回ページ設定ダイアログの6つの入力欄を埋めるより、InputBoxで対話的に聞いていく形の方が迷いません。
4. デフォルトプリンタでそのまま印刷する
Sub QuickPrint()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Set ws = ActiveSheet
ws.PrintOut Preview:=False
MsgBox "印刷を開始しました", vbInformation, "印刷"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
「印刷プレビューを開いて確認して印刷ボタンを押す」を1ステップにまとめただけですが、SetPrintAreaで範囲を決めた直後に呼べば、選択→印刷までがワンクリックで完結します。
5. PDFとしてエクスポートする
Sub CreatePDFExport()
On Error GoTo ErrorHandler
Dim ws As Worksheet
Dim pdfPath As String
Dim fileName As String
Set ws = ActiveSheet
fileName = Left(ws.Name, InStrRev(ws.Name, ".") - 1)
If fileName = ws.Name Then fileName = ws.Name
pdfPath = ws.Parent.Path & "\" & fileName & ".pdf"
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, Quality:=xlQualityStandard
MsgBox "PDFを作成しました:" & vbCrLf & pdfPath, vbInformation, "PDF作成完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
紙で印刷する必要がなく、メール添付や共有フォルダへの格納が目的なら、QuickPrintの代わりにこちらを使えばファイル名も自動で決まります。ブック名から拡張子を除いた名前がそのままPDF名になります。
組み合わせて使うと効果が出る
この5本は単体でも便利ですが、SetPrintArea → AddHeaderFooter → QuickPrint(またはCreatePDFExport)という順で呼ぶと、「範囲を選ぶ→印刷情報を整える→出力する」までが一連の流れになります。月次帳票のように「毎月同じ形式で出す」作業ほど、この一連の流れをボタン化しておく効果が大きくなります。
ここで紹介したSetPrintArea・ClearPrintArea・AddHeaderFooter・QuickPrint・CreatePDFExportを含む、VBAマクロ100本をサイトにまとめて公開しています。
