Excelで帳票や一覧表を扱っていると、次のようなことはありませんか?
- 毎回「印刷」ボタンを押すのが面倒
- 決まったシートをワンクリックで印刷したい
- マクロの最後に自動で印刷したい
このような場合は、VBAで印刷を実行すると便利です。
一度コードを作っておけば、印刷作業を自動化できるので、日々の業務をかなり効率化できます。
この記事では、ExcelVBAで印刷を実行する基本コードから、印刷プレビュー・複数部印刷・特定シート印刷まで、初心者向けに分かりやすく解説します。
この記事でできること
- アクティブシートを印刷できる
- 特定のシートだけ印刷できる
- 印刷プレビューを表示できる
- 部数指定や複数シート印刷ができる
一番基本:アクティブシートを印刷するコード
まずは一番シンプルなコードです。
今表示しているシートをそのまま印刷します。
Option Explicit
Sub PrintActiveSheet()
ActiveSheet.PrintOut
End Sub
この PrintOut が、印刷を実行する基本命令です。
コードの意味を解説
ActiveSheetとは?
現在表示されているシートを指します。
つまり、ユーザーが見ているシートをそのまま印刷するという意味です。
PrintOutとは?
Excelで実際に印刷を実行するメソッドです。
ボタンを押さなくても、VBAから直接印刷できます。
印刷プレビューを表示したい場合
いきなり印刷するのではなく、先に内容を確認したい場合はこちらです。
Option Explicit
Sub PreviewActiveSheet()
ActiveSheet.PrintPreview
End Sub
このコードなら、印刷前にプレビュー画面を表示できます。
特定のシートを印刷する方法
今のシートではなく、名前を指定して印刷したい場合はこちらです。
Option Explicit
Sub PrintSpecificSheet()
Worksheets("請求書").PrintOut
End Sub
この例では、「請求書」という名前のシートを印刷します。
複数部印刷する方法
同じシートを2部、3部と印刷したい場合は、Copies を使います。
Option Explicit
Sub PrintTwoCopies()
ActiveSheet.PrintOut Copies:=2
End Sub
これで2部印刷できます。
複数シートをまとめて印刷する方法
複数のシートを一括で印刷したい場合はこちらです。
Option Explicit
Sub PrintMultipleSheets()
Worksheets(Array("請求書", "納品書", "一覧")).PrintOut
End Sub
配列でシート名を並べることで、複数シートをまとめて印刷できます。
印刷範囲を指定して印刷する方法
シート全体ではなく、特定の範囲だけを印刷したい場合は、先に印刷範囲を設定します。
Option Explicit
Sub PrintWithArea()
With ActiveSheet
.PageSetup.PrintArea = "A1:D20"
.PrintOut
End With
End Sub
このコードでは、A1:D20 の範囲だけを印刷します。
よく使う実務向けコード
「印刷前に確認を出して、Yesなら印刷する」という形は実務で非常によく使います。
Option Explicit
Sub ConfirmAndPrint()
Dim result As VbMsgBoxResult
result = MsgBox("このシートを印刷しますか?", vbYesNo + vbQuestion, "印刷確認")
If result = vbYes Then
ActiveSheet.PrintOut
MsgBox "印刷を実行しました。", vbInformation
Else
MsgBox "印刷を中止しました。", vbExclamation
End If
End Sub
誤印刷を防ぎたい場合に便利です。
応用①:印刷前にページ設定も整える
印刷前に用紙向きや余白を整えたい場合は、次のようにまとめて書けます。
Option Explicit
Sub SetupAndPrint()
With ActiveSheet.PageSetup
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveSheet.PrintOut
End Sub
これなら、印刷レイアウトを整えてから印刷できます。
応用②:ボタンを押して印刷する
図形やボタンにマクロを登録すれば、シート上のボタンから印刷できます。
Option Explicit
Sub SetPrintButton()
ActiveSheet.Shapes("Button 1").OnAction = "PrintActiveSheet"
End Sub
こうすると、ボタン感覚で印刷できるようになります。
実務での活用例
- 請求書をワンクリックで印刷する
- 報告書を毎回同じ形式で印刷する
- 入力後に確認して印刷する
- 複数帳票をまとめて出力する
特に、毎日決まったシートを印刷する業務では、かなり効果があります。
よくあるエラーと対処法
① シート名が違う
Worksheets("請求書") の名前が実際のシート名と一致していないとエラーになります。
シート見出しの名前を正確に確認してください。
② 印刷範囲が思った通りにならない
以前の印刷範囲設定が残っていることがあります。
その場合は PageSetup.PrintArea を明示的に設定し直してください。
③ コードは正しいのにエラーになる
Webからコピーしたコードでは、全角記号や見えない特殊文字が混ざることがあります。
その場合は、エラーの出ている行を削除して手入力し直すと解決することがあります。
まとめ
- 印刷の基本は
PrintOut - プレビューは
PrintPreview - 特定シート・複数部・複数シートにも対応できる
- 実務では確認メッセージ付きが便利
印刷をVBAで自動化できるようになると、Excel業務の手間がかなり減ります。
特に帳票や報告書を繰り返し印刷する方には、とてもおすすめのマクロです。
ぜひ実務でも活用してみてください。


コメント