定型的なレポートや資料を作成する際、毎回同じシートやセル範囲を選択して印刷するのは手間がかかります。VBAを使えば、「印刷」ボタン一つで、決まった対象を、決まった設定で印刷する処理を自動化し、作業効率を大幅に向上させることができます。
この記事では、VBAによる印刷自動化の基本となる**.PrintOut
メソッド**を使い、4つの異なる対象(アクティブシート、複数シート、ブック全体、特定範囲)を印刷する方法を、具体的なコード例と共に解説します。
パターン1:現在アクティブなシートを印刷する
最も基本的なパターンです。ユーザーが現在表示・操作しているシートを1部印刷します。
コード例
Sub PrintActiveSheetOnly()
' 現在アクティブなシートを印刷
ActiveSheet.PrintOut
End Sub
ポイント解説
ActiveSheet
は、現在選択されているワークシートを指すオブジェクトです。その.PrintOut
メソッドを呼び出すだけで、そのシートが既定のプリンターから出力されます。
パターン2:複数の指定したシートをまとめて印刷する
「表紙」「目次」「集計」のように、印刷したいシートが複数に分かれている場合に便利です。
コード例
Sub PrintMultipleSheets()
' "月次報告"シートと"データシート"をまとめて印刷
Worksheets(Array("月次報告", "データシート")).PrintOut
End Sub
ポイント解説
Worksheets
オブジェクトの引数に、シート名やインデックス番号を**Array
関数**で配列として渡すことで、複数のシートを一度に選択した状態にし、まとめて印刷することができます。
パターン3:ブック全体を複数部数印刷する
ブックに含まれるすべてのシートを、指定した部数だけ印刷します。
コード例
Sub PrintEntireWorkbook_3_Copies()
' ブック全体を3部印刷する
ActiveWorkbook.PrintOut Copies:=3
End Sub
ポイント解説
ActiveWorkbook
オブジェクト:.PrintOut
メソッドをActiveWorkbook
オブジェクトに対して使うと、ブック全体が印刷対象になります。Copies
引数:.PrintOut
メソッドの引数Copies
に数値を指定することで、印刷部数をコントロールできます。- 便利な引数: この他にも、
Preview:=True
とすれば印刷プレビューを表示したり、To:=5
とすれば5ページ目までを印刷したり、といった指定も可能です。VB.Net' 例: 5ページ目までを印刷プレビューで表示 ActiveWorkbook.PrintOut To:=5, Preview:=True
パターン4:特定のセル範囲のみを印刷する
シートの一部分だけを抜き出して印刷したい場合に使います。手作業で「印刷範囲の設定」を行うのと同じ効果をVBAで実現します。
コード例
Sub PrintSpecificRanges()
' 指定した複数のセル範囲だけを印刷
Range("B2:F10, B15:F25").PrintOut
End Sub
ポイント解説
.PrintOut
メソッドはRange
オブジェクトに対しても使用できます。複数の離れた範囲を印刷したい場合は、 "範囲1, 範囲2, ..."
のように、アドレスをカンマで区切った文字列をRange
オブジェクトに渡します。
まとめ
VBAの.PrintOut
メソッドは、どのオブジェクト(Worksheet
, Workbook
, Range
など)に対して使うかによって、印刷対象を柔軟にコントロールできる非常に便利な機能です。
- 今見ているシート:
ActiveSheet.PrintOut
- 指定した複数シート:
Worksheets(Array(...)).PrintOut
- ファイル全体:
ActiveWorkbook.PrintOut
- 一部分だけ:
Range(...).PrintOut
これらの基本パターンを組み合わせ、ワークシート上に配置したボタンから呼び出すようにすれば、誰でも簡単に使える印刷システムを構築することができます。