導入:なぜ印刷設定の自動化が必要なのか
実務において、毎日のように同じフォーマットの帳票を印刷していませんか?「毎回、印刷範囲を指定し直す」「改ページ位置を調整する」「余白を修正する」といった単純作業は、件数が増えるほど人的ミスを招きやすく、時間も奪われます。
VBAを活用すれば、ワンクリックで「常に完璧なレイアウト」で印刷することが可能です。今回は、現場で即戦力となる印刷範囲の設定と、ページレイアウトの自動化テクニックを解説します。
基礎知識:PageSetupオブジェクトの重要性
Excel VBAで印刷設定を操作する際に核となるのが、PageSetupオブジェクトです。これはシートの印刷に関するあらゆる設定(余白、用紙サイズ、印刷範囲、ヘッダー・フッターなど)を司ります。
手動で行う「ページレイアウト」タブの操作の多くは、このPageSetupオブジェクトをコードで書き換えることで再現できます。
実装:印刷範囲の動的設定とページレイアウト
実務では、データ量が変わるたびに印刷範囲を更新する必要があります。固定的な範囲(A1:E20など)を指定するのではなく、CurrentRegionプロパティを使用して、データの増減に追従する範囲を自動取得するのが賢いやり方です。
サンプルプログラム:ボタン1つで印刷設定を最適化する
以下のコードを標準モジュールに貼り付け、ボタンに登録して使用してください。現在のシートのデータ範囲を自動で取得し、A4横・1ページに収まる設定で印刷プレビューを表示します。
Sub AutoPrintSetup()
Dim ws As Worksheet
Set ws = ActiveSheet
‘ 画面の更新を一時停止して処理を高速化
Application.ScreenUpdating = False
With ws.PageSetup
‘ 印刷範囲を現在のデータ範囲に設定
.PrintArea = ws.UsedRange.Address
‘ 用紙を横向きに設定
.Orientation = xlLandscape
‘ 1ページに収まるように自動縮小
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
‘ センター揃え(水平・垂直)
.CenterHorizontally = True
.CenterVertically = True
End With
‘ 設定を確認するためにプレビューを表示
ws.PrintPreview
Application.ScreenUpdating = True
End Sub
応用・注意点:現場で陥りやすいトラブル回避
1. 印刷範囲が広すぎる問題
UsedRangeは、一度でもデータが入っていたセル(書式設定のみが残っているセルなど)も範囲に含めてしまうことがあります。もし意図しない空白ページが印刷される場合は、一度「Ctrl + End」で最終セルを確認し、不要な行・列を削除する運用を徹底してください。
2. プリンタ環境による差異
PageSetupの設定は、現在接続されている「既定のプリンタ」の仕様に依存します。会社で複数のプリンタを使い分けている場合、一部の設定が反映されないことがあります。その際は、コードの冒頭で `Application.ActivePrinter` を確認するか、特定のプリンタを指定する記述を検討してください。
3. プレビューで終わらせる
いきなり `ws.PrintOut` で印刷を実行せず、まずは必ず `ws.PrintPreview` で確認する癖をつけましょう。大量の無駄な印刷を防ぐための、ベテランならではの安全策です。
