VBAで自動化 VBA一覧 ファイル・印刷操作 印刷設定

【VBA】印刷時に 1 ページにまとめる方法と応用テクニック

Excel で大きな表やレポートを印刷すると、意図せずに複数のページに分割されてしまうことがあります。
VBA が使えれば、簡単に 1 ページにまとめて印刷する設定を自動化できます。

この記事では、VBA で印刷時に 1 ページに解決する方法と、その応用テクニックについて解説します。

PageSetupを使って 1 ページにまとめる

VBA で印刷時に 1 ページにするには、PageSetupFitToPagesWideFitToPagesTall使います。

With ActiveSheet.PageSetup

.Zoom = False ' ズーム倍率を無効化
.FitToPagesWide = 1 ' 横方向を 1 ページに収める
.FitToPagesTall = 1 ' 縦方向を 1 ページに収める

End With

📌横 1 ページ × 縦 1 ページに沸く設定!
📌Zoom = FalseにしないとFitToPagesWideFitToPagesTallは適用されない!

シートを 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

📌印刷前にプレビューで確認可能! 📌
意図しないレイアウトになっていないか事前にチェック!

【VBA】印刷時にプリンターを指定する方法と応用テクニック

全シートを 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ページにまとめて一括印刷! 📌
レポートや帳票をまとめて印刷するのに便利!

【VBA】For Each ステートメントの使い方と活用例

選択範囲だけを 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】最終行:取得

【VBA】最終列を取得:範囲指定


まとめ

機能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)
データ範囲のみ印刷lastRowlastColモデル設定
おすすめの活用方法

VBA が使えるなら、簡単に 1 ページに書いて印刷できる!
プレビューを確認すると、意図しないレイアウト崩れを防ぐ!
データ範囲を自動設定すれば、印刷ミスを抑える!

-VBAで自動化, VBA一覧, ファイル・印刷操作, 印刷設定