VBAで改ページを自動挿入する方法|行数指定・条件指定・クリアの使い分け

VBAで改ページを自動挿入するには、HPageBreaks.Add(横方向)またはVPageBreaks.Add(縦方向)を使います。「50行ごと」のような行数指定も、「部門が変わるたびに」のような条件指定も、どちらもFor文と組み合わせるだけで実現できます。

この記事では、次の内容を順番に解説します。

  • 改ページの挿入・削除に使うメソッドの基本
  • 一定行ごとに改ページを入れるコード
  • 値が変わるタイミングで改ページを入れるコード
  • 縦方向(列)の改ページを入れる方法
  • 改ページをすべてクリアする方法
  • よくある質問(改ページが消えない・印刷プレビューに反映されない等)

改ページの挿入・削除に使うメソッドを理解するには?

VBAで改ページを操作するには、主に次の2つを使います。

操作コード説明
横の改ページを挿入HPageBreaks.Add Before:=Rows(行番号)指定行の上に横の区切りを入れる
縦の改ページを挿入VPageBreaks.Add Before:=Columns(列番号)指定列の左に縦の区切りを入れる
すべてクリアActiveSheet.ResetAllPageBreaks手動・自動含めてすべて削除

改ページを追加する前に必ず ResetAllPageBreaks でリセットする習慣をつけると、二重挿入や意図しない位置への挿入を防げます。

一定行ごとに改ページを入れるには?

「50行ごとに1ページにしたい」といった場合は、Stepを使って一定間隔で改ページを挿入します。

Sub InsertPageBreaks()

    Dim lastRow As Long
    Dim i As Long
    Dim step As Long

    step = 50  ' 何行ごとに改ページするか

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 既存の改ページをすべてクリア
    ActiveSheet.ResetAllPageBreaks

    ' step行ごとに改ページを挿入
    For i = step + 1 To lastRow Step step
        ActiveSheet.HPageBreaks.Add Before:=Rows(i)
    Next i

    MsgBox "改ページを設定しました。"

End Sub

このコードの流れは次の通りです。

  • step 変数で区切り行数を指定(変更したい場合はここだけ修正)
  • Cells(Rows.Count, 1).End(xlUp).Row でA列の最終行を取得
  • ResetAllPageBreaks で一旦すべてリセット
  • 51行目、101行目、151行目…と Step で飛ばしながら改ページを挿入

変数 step の値を変えるだけで、「30行ごと」「100行ごと」にも簡単に対応できます。

値が変わるタイミングで改ページを入れるには?

「部門ごと」「月ごと」のように、特定の列の値が変わるタイミングでページを切り替えたい場合は、前行との値比較を使います。

Sub InsertBreakByValue()

    Dim lastRow As Long
    Dim i As Long

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ActiveSheet.ResetAllPageBreaks

    ' A列の値が変わるタイミングで改ページを挿入(2行目以降)
    For i = 2 To lastRow
        If Cells(i, 1).Value <> Cells(i - 1, 1).Value Then
            ActiveSheet.HPageBreaks.Add Before:=Rows(i)
        End If
    Next i

    MsgBox "改ページを設定しました。"

End Sub

たとえば、A列に「営業部」「総務部」「経理部」とグループが入っている場合、部門が切り替わる行に自動で改ページが入ります。これにより、部門ごとに1ページ分の印刷資料を簡単に用意できます。

比較する列を変える場合は Cells(i, 1)1 の部分を変更してください(B列なら 2)。

縦方向(列)の改ページを入れるには?

列方向で区切りたい場合は VPageBreaks を使います。横幅の広い表を複数ページに分けて印刷したいときに便利です。

Sub InsertVPageBreak()

    ' E列(5列目)の左に縦の改ページを入れる
    ActiveSheet.VPageBreaks.Add Before:=Columns(5)

    MsgBox "縦の改ページを設定しました。"

End Sub

横の改ページ(行)と縦の改ページ(列)を組み合わせると、大きな表を複数のページにきれいに分割できます。

改ページをすべてクリアするには?

改ページをリセットしたいときは、ResetAllPageBreaks を使います。手動で入れた改ページも含めてすべて削除されます。

Sub ClearPageBreaks()

    ActiveSheet.ResetAllPageBreaks

    MsgBox "改ページをすべてクリアしました。"

End Sub

改ページの挿入マクロを実行する前にこれを呼び出す構成にしておくと、何度実行しても意図した位置だけに改ページが入るようになります。

まとめ

  • 横の改ページには HPageBreaks.Add Before:=Rows(行番号) を使う
  • 縦の改ページには VPageBreaks.Add Before:=Columns(列番号) を使う
  • 実行前に ResetAllPageBreaks でリセットする習慣をつける
  • 一定行ごとなら Step、値が変わるタイミングなら 前行との比較 で対応
  • 繰り返し印刷する定型資料ほど、自動化の効果が大きい

よくある質問

ResetAllPageBreaksを実行したのに改ページが残る場合は?

印刷範囲(PrintArea)が設定されている場合、その境界が改ページのように見えることがあります。ActiveSheet.PageSetup.PrintArea = "" で印刷範囲をクリアしてから再確認してください。

改ページが印刷プレビューに反映されない場合は?

改ページは印刷プレビューを一度開いてから挿入されるケースがあります。マクロの実行前後に印刷プレビューを開くか、ActiveSheet.PrintPreview をコードに含めることで強制的に反映させることができます。

HPageBreaksの数を確認する方法は?

MsgBox ActiveSheet.HPageBreaks.Count で現在設定されている横の改ページの数を確認できます。想定より多い場合は ResetAllPageBreaks でクリアして再設定してください。

特定の改ページだけを削除するには?

ActiveSheet.HPageBreaks(1).Delete のようにインデックスを指定して削除できます。ただし、複数の改ページがある場合は削除後にインデックスがずれるため、後ろから順に削除するか ResetAllPageBreaks で全削除してから再設定する方法が確実です。

改ページの挿入は行数が多いと遅くなる?

改ページの挿入自体は軽い処理ですが、ループ内で画面更新が走ると遅くなることがあります。Application.ScreenUpdating = False をコードの冒頭に入れて、最後に True に戻すと処理が速くなります。

動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール