Excelで印刷する際、「必要な範囲だけを印刷したい」と思う場面は多くあります。
しかし、手動で印刷範囲を毎回設定するのは手間がかかり、作業ミスの原因にもなります。
そこで今回は、マクロで印刷範囲を自動的に設定する方法をご紹介します。
日々の業務で印刷作業を行う方にとって、効率化に直結する内容です。
最終行・最終列まで自動で印刷範囲を指定する
まずは、使用しているデータの最終行・最終列を自動で検出し、印刷範囲として設定する方法を見ていきましょう。
次のコードでは、アクティブシートのデータが入っている範囲を自動的に判断し、その範囲を印刷設定します。
Sub SetPrintArea()
Dim lastRow As Long
Dim lastCol As Long
' 最終行と最終列を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
' 印刷範囲を設定
ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(lastRow, lastCol)).Address
End Sub
このマクロを実行すると、A1セルから最終データのセルまでを自動で印刷範囲として設定してくれます。
コードの補足説明
Cells(Rows.Count, 1).End(xlUp).Row
→ A列の最終行を取得(データが入力されている最後の行)Cells(1, Columns.Count).End(xlToLeft).Column
→ 1行目の最終列を取得(データがある最後の列)Range(Cells(1, 1), Cells(lastRow, lastCol)).Address
→ A1セルから最後のデータセルまでの範囲をアドレス形式で取得
この範囲を PrintArea に指定することで、毎回自動的に正しい印刷範囲が反映されるようになります。
データ範囲を名前付きシートで個別に設定する
複数のシートがあり、それぞれのシートで印刷範囲を自動で設定したい場合もあります。
次のコードでは、ブック内のすべてのワークシートに対して、印刷範囲を自動設定します。
Sub SetPrintAreaAllSheets()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
For Each ws In Worksheets
With ws
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
End With
Next ws
End Sub
このようにループを使えば、すべてのシートで一括して印刷範囲を自動設定できます。
実装するメリット
マクロで印刷範囲を自動設定することで、次のようなメリットがあります。
- 手動で印刷範囲を選択する手間が省ける
- データ量が日々変わるシートでも正確に印刷範囲を設定できる
- 作業ミスを減らし、印刷ずれや不要な余白を回避できる
- 複数シートの対応も簡単にできるため、業務効率が大きく向上する
印刷範囲のミスは地味なストレスの原因になります。
その小さなストレスを1つずつ減らしていくことが、全体の作業品質にもつながります。
まとめ
印刷範囲を毎回手作業で設定するのは、想像以上に時間を取られる作業です。
今回紹介したように、最終行・列を自動で取得して印刷範囲を設定するマクロを使えば、その作業を自動化できます。
特に、印刷するたびに範囲が変わる帳票や報告書を扱う方には、とても有効な手法です。
まずは1シートで試してみて、慣れてきたら全シート対応のマクロに切り替えていくとスムーズです。
Excelの印刷も、マクロを使えば効率化できます。
少しずつ、あなたの業務にあわせた自動化を進めていきましょう。
