【VBAリファレンス|実務向け】印刷範囲をVBAで自在に操る!PrintAreaプロパティ活用術

スポンサーリンク

導入:なぜ「印刷範囲」の自動設定が重要なのか

実務において、レポートや請求書を印刷する際、毎回手動で「ページレイアウト」から印刷範囲を設定していませんか?データ量が増減するたびに範囲指定をやり直すのは非常に非効率で、設定漏れによる「不要な白紙の印刷」といったミスも起こりがちです。VBAで印刷範囲を制御できるようになれば、データの量に応じて自動的に範囲を再計算し、常に最適な状態で印刷を実行できるようになります。今回は、業務効率を劇的に上げる「PrintAreaプロパティ」の基本と実装テクニックを解説します。

基礎知識:PageSetupオブジェクトとPrintArea

Excelで印刷設定を操作する場合、PageSetupオブジェクトを使用します。このオブジェクトには、余白、向き、ヘッダー・フッターなど、印刷に関するあらゆる設定が詰まっています。
その中でもPrintAreaプロパティは、印刷したい範囲を「A1形式の文字列(例:”$A$1:$D$10″)」で指定するものです。このプロパティに値を代入することで、プログラムから印刷範囲を動的に書き換えることが可能になります。

実装・解決策:可変範囲への対応

実務では「データが入っている範囲まで」を自動で印刷範囲にしたいケースがほとんどです。その際、CurrentRegionプロパティやUsedRangeプロパティと組み合わせるのが定石です。これにより、データ行が増えてもコードを修正することなく、常に最新のデータ範囲を自動的に印刷対象にすることができます。

サンプルプログラム:動的な印刷範囲設定と解除

以下のコードは、アクティブシートのデータがある領域(B2セルを含む連続した範囲)を自動検出し、印刷範囲として設定した後にプレビューを表示する実用例です。

Sub SetPrintAreaExample()
‘ 対象シートを明示的に指定(ここではアクティブシート)
With ActiveSheet
‘ 1. 印刷範囲を動的に設定
‘ Range(“B2”).CurrentRegion.Address でデータ領域のアドレスを取得
.PageSetup.PrintArea = Range(“B2”).CurrentRegion.Address

‘ 印刷プレビューで確認
MsgBox “印刷範囲を設定しました。プレビューを確認してください。”
.PrintPreview

‘ 2. 印刷範囲を解除する
‘ “”(空文字)を代入することで、シート全体が印刷対象に戻ります
.PageSetup.PrintArea = “”

MsgBox “印刷範囲を解除しました。次はシート全体が印刷対象になります。”
.PrintPreview
End With
End Sub

応用・注意点:現場でハマりやすいポイント

1. 行タイトル・列タイトルの重複:
「ページレイアウト」設定で「印刷タイトル(行タイトル・列タイトル)」を設定している場合、PrintAreaで指定した範囲にもそのタイトル行が含まれてしまいます。二重に印刷されないよう、あらかじめ印刷タイトル設定を確認してください。

2. 範囲解除の重要性:
マクロ終了後に印刷範囲が残ったままだと、ユーザーが手動で印刷する際に「なぜか一部しか印刷されない」という混乱を招きます。処理の最後には必ず PrintArea = “” で範囲を解除する癖をつけましょう。

3. 複数シートの取り扱い:
コード内で対象シートを省略すると、意図しないシートの印刷設定が書き換わることがあります。必ず `With ActiveSheet` や `Worksheets(“Sheet1”).PageSetup` のように、対象を明示的に記述することを強く推奨します。

タイトルとURLをコピーしました