1. 導入:なぜこの技術が重要なのか
実務において、「作成した資料を印刷したら、列がわずかにはみ出して2ページ目になってしまった」「表のサイズがバラバラで、毎回印刷設定を手動で直している」といった経験はありませんか?
Excelの印刷設定をVBAで自動化できれば、誰が操作しても「必ず1枚に収まる」「横幅だけは1枚に収めて、縦は自動調整」といった美しい印刷結果を維持できます。今回は、印刷時のレイアウト崩れを防ぐための必須プロパティを解説します。
2. 基礎知識:FitToPagesTall/Wideとは?
Excel VBAには、ページ設定を管理するPageSetupオブジェクトというものがあります。その中で、印刷の縮小率を自動調整してくれるのが以下の2つのプロパティです。
FitToPagesWide:横方向に何ページで収めるかを指定します。
FitToPagesTall:縦方向に何ページで収めるかを指定します。
ここで最も重要な注意点があります。これらを有効にするには、必ずZoomプロパティをFalseにする必要があります。Zoomプロパティ(拡大縮小倍率)が指定されていると、ページ数の指定は無視されてしまうため、必ずセットで記述する癖をつけましょう。
3. 実装/解決策:具体的な手順
実務でよくあるシナリオは「とにかく1枚に収めたい」ケースと「横幅だけは1ページに収めたい」ケースの2つです。これらはVBAで以下のように制御します。
・すべてを1ページに収める:FitToPagesWide = 1、FitToPagesTall = 1
・横幅だけ1ページに収める:FitToPagesWide = 1、FitToPagesTall = False
4. サンプルプログラム:そのまま使える印刷設定マクロ
以下は、アクティブシートを横幅1ページに収めて印刷するための実用的なコードです。
Sub SetupPrintLayout()
‘ ページ設定オブジェクトを操作するためにWithを使用
With ActiveSheet.PageSetup
‘ (重要) 拡大縮小率を自動調整にするためにFalseを設定
.Zoom = False
‘ 横方向を1ページに収める
.FitToPagesWide = 1
‘ 縦方向は自動(ページ数制限なし)にする場合
‘ 制限を解除するにはFalseを指定します
.FitToPagesTall = False
‘ (補足) 必要に応じて用紙の向きも指定するとより確実です
.Orientation = xlLandscape ‘ 横向きに設定
End With
‘ プレビューを表示して確認する(不要なら削除してください)
ActiveSheet.PrintPreview
End Sub
5. 応用・注意点:現場で陥りやすいバグ
現場でよくある失敗として、「設定したのに反映されない」というケースがあります。これは、ZoomプロパティをFalseにすることを忘れている場合がほとんどです。
また、「FitToPagesTallに0を指定するとエラーになる」という点も注意が必要です。ページ数を制限したくない場合は、0ではなく必ずFalseを使用してください。
さらに、この設定は「最後に実行したVBAの命令」がファイルに保存されるため、マクロを実行した後に手動で印刷設定をいじると、設定が混在して意図しない結果になることがあります。配布用のファイルを作る際は、印刷直前に必ずこのマクロを通すような構成にするのが、安定した出力を保つためのベテランの知恵です。
