Excel で印刷する際、必要な範囲だけを印刷したいという場面はよくあります。
VBA が使えれば、特定のセル範囲を自動で印刷範囲として設定したり、動的に変更することが可能です。
この記事では、Excel VBAでの印刷範囲の設定方法や、便利な応用テクニックを解説します。
目次
印刷範囲を設定する(PrintArea)
✅PrintAreaプロパティの基本
印刷範囲はPageSetup.PrintArea使って設定します。
ActiveSheet.PageSetup.PrintArea = "A1:D20"
📌このコードを実行すると、A1:D20の範囲だけが印刷対象になります!
✅ 印刷範囲をVBAで設定
Sub SetPrintArea()
ActiveSheet.PageSetup.PrintArea = "$A$1:$D$20"
End Sub
📌絶対参照($A$1:$D$20)を指定して、範囲を固定!
📌マクロ実行後、Ctrl + P(印刷)を押すと設定が適用されている!
✅ 印刷範囲をクリア(全シート)
Sub ClearPrintArea()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.PageSetup.PrintArea = ""
Next ws
End Sub
📌全シートの印刷範囲をリセット!
動的に印刷範囲を設定
データが追加される場合、最後の行や列を考慮して印刷範囲を動的に設定すると便利です。
✅ データがある範囲を自動設定
Sub SetDynamicPrintArea()
Dim lastRow As Long, lastCol As Long
Dim printRange As String
With ActiveSheet
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
printRange = "$A$1:" & Cells(lastRow, lastCol).Address
.PageSetup.PrintArea = printRange
End With
End Sub
📌データの最終行・最終列を自動検出し、印刷範囲を設定!
📌データの追加・削除に対応可能!
✅選択範囲を印刷範囲に設定
Sub SetPrintAreaFromSelection()
If Not Selection Is Nothing Then
ActiveSheet.PageSetup.PrintArea = Selection.Address
Else
MsgBox "範囲を選択してください!", vbExclamation
End If
End Sub
📌ユーザーが選択した範囲を印刷範囲として設定!
📌範囲を選択せずに実行すると、メッセージを表示します!
【VBA】印刷時に 1 ページにまとめる方法と応用テクニック
印刷範囲の拡張
✅ 2ページに分かれる場合に、行を自動で追加
Sub ExpandPrintArea()
Dim printRange As Range
Set printRange = ActiveSheet.Range(ActiveSheet.PageSetup.PrintArea)
' 既存の印刷範囲 + 10行追加
ActiveSheet.PageSetup.PrintArea = printRange.Resize(printRange.Rows.Count + 10, printRange.Columns.Count).Address
End Sub
📌現在の印刷範囲を取得し、10行分拡張!
✅ 変更ページの位置を調整
Sub AdjustPageBreak()
ActiveSheet.HPageBreaks(1).Location = ActiveSheet.Range("A50")
End Sub
📌水平方向の変更ページをA50設定!
📌長いレポートを見やすく印刷可能!
印刷範囲を 1 ページにまとめる
VBA で印刷時に 1 ページに理解する設定を適用することもできます。
Sub FitToOnePage()
With ActiveSheet.PageSetup
.Zoom = False ' 自動調整を有効にする
.FitToPagesWide = 1 ' 横1ページに収める
.FitToPagesTall = 1 ' 縦1ページに収める
End With
End Sub
📌シート全体を自動縮小し、1ページにおまかせ!
印刷範囲の設定と同時に印刷
✅ 印刷範囲を設定 → プレビュー
Sub SetPrintAreaAndPreview()
ActiveSheet.PageSetup.PrintArea = "$A$1:$D$20"
ActiveSheet.PrintPreview
End Sub
📌印刷範囲を設定した後、プレビューを表示!
✅ 印刷範囲を設定 → 直接印刷
Sub SetPrintAreaAndPrint()
ActiveSheet.PageSetup.PrintArea = "$A$1:$D$20"
ActiveSheet.PrintOut
End Sub
📌印刷範囲を設定し、すぐに印刷!(確認なし)
複数シートの印刷範囲を一括設定
Sub SetPrintAreaForAllSheets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.PageSetup.PrintArea = "$A$1:$D$20"
Next ws
End Sub
📌すべてのシートで同じ印刷範囲を設定!
まとめ
| 機能 | VBAコード |
|---|---|
| 印刷範囲 | ActiveSheet.PageSetup.PrintArea = "$A$1:$D$20" |
| 印刷範囲をクリア | ActiveSheet.PageSetup.PrintArea = "" |
| データ範囲を自動設定 | lastRowとlastColモデル設定 |
| 選択範囲を印刷範囲に | Selection.Address翻訳 |
| 印刷範囲を拡張 | .Resize(行数, 列数)見る |
| 印刷を 1 ページにする | .FitToPagesWide = 1 |
| ページの調整 | .HPageBreaks(1).Location = Range("A50") |
| 印刷プレビューを表示 | ActiveSheet.PrintPreview |
| 印刷範囲を設定後に印刷 | ActiveSheet.PrintOut |
おすすめの活用方法
✅PrintAreaを使えば、特定範囲のみ印刷可能!
✅データの追加に対応するなら「動的に設定」がおすすめ!
✅印刷前にPrintPreview確認するとミスが見つかる!
✅ 「全シート一括適用」や「選択範囲を印刷」も便利!