📊 Excel VBA Top100
📋

SetPrintArea

シート管理

選択範囲を印刷範囲に設定する

VBAでワークシートの印刷範囲を指定するマクロです。PageSetup.PrintAreaプロパティにセル範囲のアドレスを文字列で設定することで印刷エリアを確定します。動的にデータ範囲を検出して自動的に印刷範囲を設定するロジックを組み込むことで、データ量が毎回変わるレポートでも常に適切な範囲を印刷できます。複数シートへの一括設定も効率的に行えます。内部ではPageSetup.PrintAreaにセル範囲の文字列を代入しており、End(xlDown)やEnd(xlToRight)で最終行・最終列を動的に検出するロジックと組み合わせれば、データ量が変動するレポートでも常に過不足のない印刷範囲を維持できます。ClearPrintAreaとは逆方向の処理として、リセットと再設定をセットで運用すると安全です。

SetPrintArea デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 印刷範囲に設定するセル範囲を選択してから実行

🎯 活用シーン

  • ✓毎月行数が変わる売上レポートの印刷範囲を自動調整
  • ✓A4用紙に収まるよう列範囲を限定した印刷範囲を設定
  • ✓複数シートに同一サイズの印刷範囲を一括で設定
  • ✓行数が毎月変動する売上レポートで、常に最新のデータ範囲だけを印刷対象にしたいとき
  • ✓A4一枚に収めたい資料で、必要な列だけを厳密に指定した印刷範囲を設定したいとき

💡 実装のヒント

  • ▸PrintArea = "A1:H50" のように文字列でアドレスを指定します
  • ▸LastRowを動的に検出してPrintAreaを自動調整できます
  • ▸Union関数で飛び離れた複数範囲を印刷範囲に含めることもできます
  • ▸複数の離れた範囲を1つの印刷ジョブに含めたい場合は、Union関数で結合したアドレスをPrintAreaに指定してください。
  • ▸印刷範囲の設定後は必ずPrintPreviewで意図した範囲になっているか確認する習慣をつけることをお勧めします。

💻 VBAコード

' SetPrintArea
' -----------------
' Macro Name: SetPrintArea
' Description: 選択範囲を印刷範囲に設定する
' Parameters: なし
' Returns: なし
' Usage: 印刷範囲に設定するセル範囲を選択してから実行
' -----------------

Sub SetPrintArea()
    Dim ws As Worksheet
    Dim printArea As String

    On Error GoTo ErrorHandler

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してください。", vbExclamation
        Exit Sub
    End If

    Set ws = ActiveSheet
    printArea = Selection.Address

    ws.PageSetup.PrintArea = printArea

    MsgBox "印刷範囲を設定しました: " & printArea, vbInformation
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub