導入
業務で作成するExcel帳票において、印刷設定の手間を感じたことはありませんか?「毎回同じヘッダーを入力する」「余白を調整する」「A4横に設定し直す」といった作業は、シート数が多くなるほどミスが発生しやすく、非常に非効率です。これらをVBAで自動化できれば、誰が実行しても同じ品質で印刷準備を整えることができます。今回は、Excelの印刷設定を司る「PageSetupオブジェクト」の活用術を解説します。
基礎知識
PageSetupオブジェクトとは、WorksheetやChartオブジェクトが持つ「ページ設定」を操作するための機能です。Excelの画面上で言うところの[ページレイアウト]タブや[ページ設定]ダイアログにある設定(余白、用紙サイズ、印刷の向き、ヘッダー・フッターなど)を、プログラムから制御できます。重要な点として、このオブジェクトはWorksheet等の「下位」にあるため、操作する際は必ず対象のシートを指定する必要があります。
実装/解決策
PageSetupを扱う際のポイントは、「対象シートを一つずつ指定する」ことです。Worksheetsコレクション全体に対して一度に設定を適用することはできません。そのため、実務ではFor Each構文などを用いて、各シートをループ処理で回しながら設定を適用するのが定石です。また、ヘッダー・フッターには「書式コード」という特別な文字列を使用することで、柔軟な表示が可能になります。
サンプルプログラム
以下のコードは、ブック内の全シートに対し、印刷の向きを横にし、中央ヘッダーにシート名を、右フッターに日付を自動挿入する実用的な例です。
Sub SetPrintFormat()
Dim ws As Worksheet
‘ ブック内の全シートをループ処理
For Each ws In Worksheets
‘ PageSetupオブジェクトの操作
With ws.PageSetup
‘ 印刷の向きを横に設定
.Orientation = xlLandscape
‘ 用紙サイズをA4に設定
.PaperSize = xlPaperA4
‘ ヘッダーの中央にシート名を表示(&Aはシート名を表す書式コード)
.CenterHeader = “&A”
‘ フッターの右側に現在の日付を表示
.RightFooter = “&D”
‘ 余白を標準に設定(必要に応じて調整)
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
End With
Next ws
MsgBox “全シートのページ設定が完了しました。”
End Sub
応用・注意点
実務で特に注意すべきなのは「マクロ実行時の値」と「動的な値」の扱いです。サンプルにある「&A」のような書式コードを使えば、マクロ実行後にシート名を変更しても、印刷時には最新のシート名が反映されます。しかし、特定のセルの値をヘッダーに反映させたい場合、書式コードは存在しません。その場合は、PrintTitleRows(印刷タイトル行)プロパティを活用して、行自体を印刷見出しとして固定する方法が推奨されます。また、余白などは環境によって単位の解釈が異なる場合があるため、一度設定して印刷プレビューを確認し、微調整を行うのがバグを防ぐコツです。
