Excelの作業を自動化したいと考えたとき、「印刷」操作をVBAで行うことができれば非常に便利です。特定のシートだけを印刷したり、複数のブックを一括印刷したりと、手動でやると面倒な作業も一瞬で済ませることができます。この記事では、Excel VBAで印刷を行う方法について、初心者にもわかりやすく、基本的な使い方から少し応用的な使い方までを詳しく解説していきます。
VBAで印刷する基本のコードとは?
VBAで印刷を行う基本的なコードは以下の通りです。
ActiveSheet.PrintOut
このコードは、現在アクティブになっているシートをそのまま印刷する命令です。非常にシンプルですが、これだけでVBAから印刷ができます。
もし特定のシートを印刷したい場合は、以下のように記述します。
Worksheets("Sheet1").PrintOut
これで「Sheet1」という名前のシートが印刷されます。
印刷オプションの使い方(部数やページ範囲の指定)
PrintOut
メソッドには、さまざまなオプションを指定できます。例えば次のように記述すると、より柔軟な印刷が可能になります。
Worksheets("Sheet1").PrintOut _
From:=1, To:=2, Copies:=2, Collate:=True
From
:印刷する開始ページTo
:印刷する終了ページCopies
:印刷部数Collate
:複数部印刷する際にページ順を揃えるかどうか(Trueなら揃える)
こうしたパラメータをうまく活用することで、手動での印刷作業が大幅に省力化されます。
印刷ダイアログを表示させる方法
「自動ではなく、印刷前に確認したい」という場合は、印刷ダイアログを表示させる方法もあります。
Application.Dialogs(xlDialogPrint).Show
このコードを実行すると、通常の「印刷」ダイアログが表示され、ユーザーはそこで設定を確認してから印刷できます。
複数シートをまとめて印刷する
複数のシートを選択して一括印刷するには、以下のように記述します。
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).PrintOut
これで指定された複数のシートが順に印刷されます。業務で月報や日報をまとめて出力する場合に非常に便利です。
印刷プレビューを表示するコード
印刷前に内容をプレビューで確認したいときは、PrintPreview
メソッドを使います。
ActiveSheet.PrintPreview
または特定のシートに対して:
Worksheets("Sheet1").PrintPreview
この方法で、ユーザーが内容を確認してから印刷に進むことができます。
印刷時にヘッダーやフッターを設定する
VBAを使えば、ヘッダーやフッターの内容も動的に設定することが可能です。
With Worksheets("Sheet1").PageSetup
.CenterHeader = "売上レポート"
.LeftFooter = "作成者:山田"
.RightFooter = "ページ &P / &N"
End With
&P
は現在のページ番号&N
は総ページ数
といったように、VBA内で細かく指定することで、毎回の手動入力を省くことができます。
印刷範囲の設定と解除
印刷する範囲を指定したい場合は、以下のように設定します。
Worksheets("Sheet1").PageSetup.PrintArea = "A1:G20"
設定を解除したい場合は、空白文字列を指定します。
Worksheets("Sheet1").PageSetup.PrintArea = ""
この指定を入れておけば、印刷範囲ミスによるトラブルを未然に防げます。
PDFとして出力するには?
印刷ではなくPDFとしてファイル出力したい場合は、次のようにExportAsFixedFormat
を使います。
Worksheets("Sheet1").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:="C:\Users\user\Desktop\report.pdf", _
Quality:=xlQualityStandard
このコードを使えば、VBAで自動的にPDF出力することが可能です。報告書などを毎回PDFで提出する業務には最適です。
印刷エラー対策:よくあるトラブルと対処法
印刷に関連するVBAコードでよくあるエラーには以下のようなものがあります。
- 指定したシートが存在しない:→ シート名のスペルミスに注意
- プリンターがオフライン:→ プリンターの電源と接続を確認
- 印刷範囲が未設定:→ 必要に応じて
.PrintArea
を設定する
VBAでエラーが発生したときは、まず On Error Resume Next
を使ってエラー処理を追加しておくと、プログラムが停止することを防げます。
On Error Resume Next
Worksheets("Sheet1").PrintOut
If Err.Number <> 0 Then
MsgBox "印刷エラーが発生しました: " & Err.Description
End If
On Error GoTo 0
まとめ:印刷操作もVBAで効率化しよう
VBAでの印刷操作は、一見地味な作業に見えるかもしれませんが、実務では非常に重要で頻繁に使われるものです。
毎日の業務の中で手間に感じる印刷作業を、VBAでスマートに処理することで、時間の節約にもつながります。
今回紹介した基本のコードから応用的な設定までを活用すれば、あなたのExcel業務はさらに快適になるでしょう。
ぜひ、自分の業務に合わせてカスタマイズしながら、VBAによる印刷操作をマスターしてください。