【Excel VBA】印刷時の改ページ位置を一定間隔で自動設定する方法

大量のデータが入力されたExcelシートを印刷すると、意図しない場所で改ページされてしまい、表の途中で切れて見づらくなってしまうことはありませんか? 手作業で一つずつ改ページを設定するのは、データ量が多いと非常に手間がかかります。

VBAを使えば、「〇行ごと」「〇列ごと」といったルールで、改ページを自動的に挿入することが可能です。この記事では、印刷レイアウトをきれいに整えるための、再利用可能なVBAコードを解説します。


目次

完成したVBAコード

以下が、指定した行数・列数の間隔で、シートに手動改ページを自動で設定するVBAコードです。

Sub SetCustomPageBreaks()

    '--- 設定箇所 ---
    ' 改ページを挿入する間隔を定数で指定します
    Const ROW_INTERVAL As Long = 20 ' 20行ごとに改ページ
    Const COLUMN_INTERVAL As Long = 5  ' 5列ごとに改ページ
    '--- 設定ここまで ---

    ' 変数を宣言します
    Dim targetSheet As Worksheet
    Dim lastCell As Range
    Dim i As Long

    ' 現在アクティブなシートを操作対象に設定
    Set targetSheet = ActiveSheet
    
    ' 事前準備と設定
    With targetSheet
        ' 画面の表示モードを「標準」に設定
        .Parent.Windows(1).View = xlNormalView
        
        ' 1. 既存の改ページをすべてリセット
        .Cells.PageBreak = xlNone
        
        ' 2. データが入力されている最終セルを取得
        '   UsedRangeにデータがない場合のエラーを回避
        If Application.WorksheetFunction.CountA(.Cells) = 0 Then Exit Sub
        Set lastCell = .UsedRange.Cells(.UsedRange.Cells.Count)
        
        ' 3. 指定した間隔で「行」の改ページを挿入
        For i = ROW_INTERVAL + 1 To lastCell.Row Step ROW_INTERVAL
            .Rows(i).PageBreak = xlPageBreakManual
        Next i
        
        ' 4. 指定した間隔で「列」の改ページを挿入
        For i = COLUMN_INTERVAL + 1 To lastCell.Column Step COLUMN_INTERVAL
            .Columns(i).PageBreak = xlPageBreakManual
        Next i
    End With
    
    ' 完了メッセージ
    MsgBox "改ページの設定が完了しました。「表示」タブの「改ページプレビュー」で確認してください。"

End Sub

コードのポイント解説

① 定数で間隔を指定

Const ROW_INTERVAL As Long = 20
Const COLUMN_INTERVAL As Long = 5

コードの冒頭部分で、改ページを挿入する間隔を行と列でそれぞれ指定しています。この数値を変更するだけで、簡単に間隔をカスタマイズできます。

② 既存の改ページをすべてリセット

.Cells.PageBreak = xlNone

マクロを実行する前に、手動で設定された改ページが残っている可能性があります。最初にシート全体の改ページをxlNoneで一度すべて解除することで、何度マクロを実行しても、必ず同じ結果になるようにしています。これは非常に重要な初期化処理です。

③ データ範囲の最終セルを取得

Set lastCell = .UsedRange.Cells(.UsedRange.Cells.Count)

データがどこまで入力されているかをVBAが自動で判断するために、.UsedRangeプロパティを利用しています。これにより、シート上のデータ範囲の右下のセル(lastCell)を取得し、その行番号と列番号をループ処理の上限として利用しています。

④ ループ処理で改ページを挿入

For i = ROW_INTERVAL + 1 To lastCell.Row Step ROW_INTERVAL
    .Rows(i).PageBreak = xlPageBreakManual
Next i

For...Step...という構文のループ処理を使い、指定した間隔(ROW_INTERVAL)でカウンター変数iを増やしながら、改ページを挿入していきます。

  • .Rows(i).PageBreak = xlPageBreakManual: 指定した行(i行目)の上に、手動改ページを挿入します。
  • .Columns(i).PageBreak = xlPageBreakManual: 指定した列(i列目)の左に、手動改ページを挿入します。

実行結果の確認

このマクロを実行した後、Excelの表示タブにある**「改ページ プレビュー」**をクリックしてみてください。

シート上に、設定した間隔で青い点線(手動改ページ)が引かれているのが確認できます。これにより、印刷した際のページの区切りが意図通りに設定されていることが視覚的に分かります。


まとめ

大量のデータをきれいに印刷するための改ページ設定は、VBAを使えば一瞬で完了します。

  1. **xlNone**で既存の改ページをクリアする。
  2. **UsedRange**でデータの末尾を把握する。
  3. For...Stepループを使い、一定間隔で**xlPageBreakManual**を設定する。

この手順で、定型的な印刷業務の手間を大幅に削減し、誰が実行しても同じ印刷結果を得られる、標準化された運用が可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次