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 ページに書いて印刷できる!
✅プレビューを確認すると、意図しないレイアウト崩れを防ぐ!
✅データ範囲を自動設定すれば、印刷ミスを抑える!