Excel で大きな表やレポートを印刷すると、意図せずに複数のページに分割されてしまうことがあります。
VBA が使えれば、簡単に 1 ページにまとめて印刷する設定を自動化できます。
この記事では、VBA で印刷時に 1 ページに解決する方法と、その応用テクニックについて解説します。
目次
PageSetupを使って 1 ページにまとめる
VBA で印刷時に 1 ページにするには、PageSetupのFitToPagesWideとFitToPagesTallを使います。
With ActiveSheet.PageSetup
.Zoom = False ' ズーム倍率を無効化
 .FitToPagesWide = 1 ' 横方向を 1 ページに収める
 .FitToPagesTall = 1 ' 縦方向を 1 ページに収める
End With
📌横 1 ページ × 縦 1 ページに沸く設定!
📌Zoom = FalseにしないとFitToPagesWideとFitToPagesTallは適用されない!
シートを 1 ページにまとめて印刷する
以下のマクロを実行すると、最新シートが 1 ページに書き込まれ、印刷されます。
Sub PrintFitToOnePage()
With ActiveSheet.PageSetup
.Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With
 ActiveSheet.PrintOut
End Sub
📌自動で 1 ページに絞って印刷!
📌データが多い場合はフォントが縮小されるので注意!
印刷プレビューを表示する
印刷前にレイアウトを確認したい場合は、PrintPreview使うと便利です。
Sub PrintPreviewFitToOnePage()
With ActiveSheet.PageSetup
.Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With
 ActiveSheet.PrintPreview
End Sub
📌印刷前にプレビューで確認可能! 📌
意図しないレイアウトになっていないか事前にチェック!
全シートを 1 ページにまとめて印刷
ブック内のすべてのシートを 1 ページにして印刷する場合、For Eachを使います。
Sub PrintAllSheetsFitToOnePage()
Dim ws As Worksheet
 For Each ws In ThisWorkbook.Sheets
With ws.PageSetup
.Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With
 ws.PrintOut
Next ws
End Sub
📌全シートを 1ページにまとめて一括印刷! 📌
レポートや帳票をまとめて印刷するのに便利!
選択範囲だけを 1 ページにして印刷
特定の範囲だけを 1 ページにまとめて印刷したい場合は、PrintAreaを設定します。
Sub PrintSelectionFitToOnePage()
If Not Selection Is Nothing Then
With ActiveSheet.PageSetup
.PrintArea = Selection.Address ' 選択範囲を印刷範囲に設定
 .Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With
ActiveSheet.PrintOut
Else
MsgBox "範囲を選択してください!", vbExclamation
End If
End Sub
📌選択範囲だけを 1 ページにして印刷!
📌不要な部分を印刷しないので、紙の節約にも!
用紙サイズをA4に設定
当然の用紙サイズではなく、A4 に設定して 1 ページにすることもできます。
Sub PrintA4FitToOnePage()
With ActiveSheet.PageSetup
.PaperSize = xlPaperA4 ' A4 に設定
 .Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With
ActiveSheet.PrintOut
End Sub
📌 A4 サイズに固定して 1 ページに答えて印刷!
📌他のサイズ (xlPaperLetterなど) も変更可能です!
余白を調整して 1 ページに留める
印刷の見た目を調整したい場合は、余白の設定を変更できます。
Sub PrintWithAdjustedMargins()
With ActiveSheet.PageSetup
.Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
 .LeftMargin = Application.InchesToPoints(0.3)
 .RightMargin = Application.InchesToPoints(0.3)
 .TopMargin = Application.InchesToPoints(0.5)
 .BottomMargin = Application.InchesToPoints(0.5)
End With
 ActiveSheet.PrintOut
End Sub
📌余白を調整して、よりレイアウトに!
印刷範囲をデータの最終行・最終列までに設定
データがある範囲だけを 1 ページにまとめて印刷する場合は、最終行・最終列を自動検出します。
Sub PrintDataRangeFitToOnePage()
Dim lastRow As Long, lastCol As Long
 With ActiveSheet
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
 lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
 .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(lastRow, lastCol)).Address
 .Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With
 ActiveSheet.PrintOut
End Sub
📌データの最終行・最終列を検出し、自動で印刷範囲を設定!
📌データがついても、正しい範囲だけを 1ページに整理して印刷!
まとめ
| 機能 | VBAコード | 
|---|---|
| シート全体を 1 ページに留める | .FitToPagesWide = 1, .FitToPagesTall = 1 | 
| 印刷プレビューを表示 | ActiveSheet.PrintPreview | 
| 全シートを 1 ページに置いて印刷 | For Each ws In Sheets: ws.PageSetup.FitToPagesWide = 1 | 
| 選択範囲を 1 ページに把握する | .PrintArea = Selection.Address | 
| A4サイズに設定した | .PaperSize = xlPaperA4 | 
| 余白を調整 | .LeftMargin = Application.InchesToPoints(0.3) | 
| データ範囲のみ印刷 | lastRowとlastColモデル設定 | 
おすすめの活用方法
✅ VBA が使えるなら、簡単に 1 ページに書いて印刷できる!
✅プレビューを確認すると、意図しないレイアウト崩れを防ぐ!
✅データ範囲を自動設定すれば、印刷ミスを抑える!