導入:なぜ「1ページ印刷」の自動化が重要なのか
実務において、作成した資料を「必ずA4用紙1枚に収めて印刷したい」という要望は非常に頻繁に発生します。しかし、印刷のたびに手動でページ設定を変更するのは手間ですし、設定ミスによる「意図しない改ページ」や「無駄な余白」は、資料の信頼性を損なう原因にもなります。今回は、手動操作の解説に加え、VBAを用いてこの設定を「ボタン一つ」で適用する方法を解説します。
基礎知識:ページ設定における「拡大縮小印刷」の仕組み
Excelには、印刷範囲を自動調整する「拡大縮小印刷」という機能があります。通常、印刷設定のダイアログで行う操作をVBAで制御するには、`PageSetup`オブジェクトを使用します。
特に重要なのが以下のプロパティです。
Zoom:倍率を直接指定する場合に使用します。
FitToPagesWide:横方向に何ページに収めるかを指定します。
FitToPagesTall:縦方向に何ページに収めるかを指定します。
「1ページに収める」ためには、まず`Zoom`を`False`(自動調整モード)にする必要がある点に注意してください。
実装/解決策:VBAで印刷設定を強制する
VBAでページ設定を制御する場合、単に「1ページ」と指定するだけでなく、一度「自動調整モード」へ切り替えるロジックを組むのがコツです。そうしないと、以前設定した倍率が優先されてしまい、意図した通りにならないことがあります。
サンプルプログラム:1ページに収めて印刷するマクロ
以下のコードは、アクティブシートを横1ページ、縦1ページに自動調整し、印刷プレビューを表示するものです。
Sub PrintToOnePage()
' アクティブシートのページ設定を取得
With ActiveSheet.PageSetup
' 拡大縮小モードを自動調整に設定(これをしないとページ数が反映されない)
.Zoom = False
' 横方向を1ページに設定
.FitToPagesWide = 1
' 縦方向を1ページに設定
' ※縦を自動(無制限)にしたい場合は .FitToPagesTall = False とします
.FitToPagesTall = 1
End With
' 印刷プレビューを表示して確認を促す
ActiveSheet.PrintPreview
End Sub
応用・注意点:現場で陥りやすい罠と回避策
1. 縦方向を無制限にする場合
表が縦に長い場合、無理やり1ページに詰め込むと文字が小さすぎて読めなくなります。その場合は、`FitToPagesTall = 1` の部分を `False` に書き換えてください。これで「横幅だけ1ページに収め、縦は必要に応じて増える」設定になります。
2. プリンタドライバによる影響
`PageSetup`の設定は、現在選択されているプリンタドライバの情報に依存します。例えば、デフォルトプリンタが「PDF出力」になっている時と「物理プリンタ」になっている時で、改ページ位置が微妙にずれることがあります。厳密なレイアウトが必要な場合は、マクロ内でプリンタを指定するか、プレビューで最終確認をする習慣をつけましょう。
3. 印刷範囲(PrintArea)の確認
もし上記コードで意図通りにならない場合は、`ActiveSheet.PageSetup.PrintArea` が正しく設定されているか確認してください。不要なセルまで印刷範囲に含まれていると、文字が極端に小さくなることがあります。
