複数シートの印刷設定を一括でそろえる(用紙・向き・1ページに収める)
シートごとにばらばらの印刷設定を、マクロで一括してそろえる方法です。用紙サイズ・向き・余白・1ページに収める設定・ヘッダーとフッターをまとめて設定します。
どんな場面で使うか
シートが何十枚もある報告書を印刷や PDF にしたとき、シートによって縦横の向きや余白が違い、はみ出して2ページに分かれてしまう、ということがあります。1枚ずつページ設定を開いて直すのは手間がかかります。
マクロで全シートのページ設定を同じ値にそろえれば、毎回同じ見た目で印刷できます。PDF を作るマクロ(請求書の一括作成など)の前処理としても役立ちます。
PageSetup で設定できる主な項目
ページ設定は Worksheet の PageSetup で行います。よく使う項目は次のとおりです。
- PaperSize:用紙サイズ(xlPaperA4 など)
- Orientation:向き(xlPortrait 縦/xlLandscape 横)
- Zoom・FitToPagesWide・FitToPagesTall:拡大縮小と1ページに収める設定
- LeftMargin など:余白(Application.CentimetersToPoints で cm 指定)
- CenterFooter など:ヘッダー・フッター(&P でページ番号、&A でシート名)
コード
「表紙」以外の全シートを、A4横・幅を1ページに収める・余白1.5cm・フッターにシート名とページ番号、にそろえます。PageSetup の設定はプリンターとの通信が発生して遅いため、まとめて設定する前後で PrintCommunication を切り替えています。
Sub UnifyPageSetup()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "表紙" Then
Application.PrintCommunication = False
With ws.PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1 ' 幅は1ページ
.FitToPagesTall = False ' 縦は自動(行が多ければ複数ページ)
.LeftMargin = Application.CentimetersToPoints(1.5)
.RightMargin = Application.CentimetersToPoints(1.5)
.TopMargin = Application.CentimetersToPoints(1.5)
.BottomMargin = Application.CentimetersToPoints(1.5)
.CenterFooter = "&A &P / &N ページ"
.PrintTitleRows = "$1:$1" ' 1行目を各ページに見出しとして印刷
End With
Application.PrintCommunication = True
End If
Next ws
Application.ScreenUpdating = True
MsgBox "印刷設定をそろえました"
End Subコードのポイント
FitToPagesWide と FitToPagesTall を使うときは、先に Zoom を False にする必要があります。Zoom に数値が入っていると、1ページに収める設定が無視されます。
FitToPagesTall に False を指定すると、縦方向のページ数は自動になり、幅だけを1ページに収められます。縦も1ページにすると、行の多いシートで文字が極端に小さくなるため、明細のような長い表では幅だけをそろえるのがおすすめです。
注意点
PrintCommunication を False にしたままエラーで止まると、その後の印刷設定が反映されない状態になることがあります。エラー処理で True に戻すか、止まった場合は Excel を再起動してください。また、既定のプリンターがない PC では、ページ設定の変更自体がエラーになる場合があります。その場合は、Windows の設定で「Microsoft Print to PDF」などを既定のプリンターにしてから実行してください。
※用紙サイズや余白は、社内の帳票ルールに合わせて調整してください。