Excel VBA データ項目の境目に印刷改ページを挿入する

スポンサーリンク

データの項目の境目に印刷改ページを挿入する方法

複数のページに渡るようなデータを印刷するような場合は、自動的に挿入される改ページ位置ではなく項目毎に改ページしたい場合があると思います。ここでは、項目の境目に印刷改ページを挿入する方法をご紹介します。

例として、顧客台帳を顧客担当者別に改ページします。

  • 1列目が顧客No
  • 2列目が顧客名
  • 3列目が住所
  • 4列目が電話番号
  • 5列目が顧客担当

になっているデータを想定して、データの顧客担当者が変わる境目に改ページを挿入し、顧客担当者毎に顧客台帳を印刷できるようにします。

顧客台帳データ(イメージ)

プログラムの流れ

  1. データの順番がバラバラなので最初に顧客担当毎にデータを並び替えます
  2. タイトル行を設定して各印刷ページに反映するようにします。
  3. 繰り返し処理と条件分岐を使って顧客担当者が上下行で一致しているかを確認します。違っていたらそこに改ページを入れます。

データの項目の境目に印刷改ページを挿入するコードと解説

Sub 改ページ挿入()
 Application.ScreenUpdating = False
 Dim 並列1 As Long
 Dim 並列2 As Long
 Dim 改列 As Long
 Dim 印刷範囲 As Range
 Dim i As Long
  並列1 = 5    '並び替え優先1の行番号
  並列2 = 1    '並び替え優先2の行番号
  改列 = 5     '改ページ基準項目行番号
  Range("A1").CurrentRegion.Sort Key1:=Cells(2, 並列1), key2:=Cells(2, 並列2)
  Range("A1").CurrentRegion.Select
  Selection.Offset(1).Resize(Selection.Rows.Count - 1).Name = "database"
 Set 印刷範囲 = Range("database")
 With ActiveSheet
    .PageSetup.PrintTitleRows = "$1:$1"
    .PageSetup.PrintArea = 印刷範囲.Address
    .ResetAllPageBreaks
  End With
 For i = 2 To 印刷範囲.Rows.Count - 1
 If 印刷範囲.Cells(i, 改列).Value <> 印刷範囲.Cells(i + 1, 改列).Value Then
   印刷範囲.Cells(i + 1, 1).PageBreak = xlPageBreakManual
 End If
 Next i
  ActiveWindow.View = xlPageBreakPreview
  Application.ScreenUpdating = True
End Sub
2行目【Application.ScreenUpdating = False】
Application【アプリケーション】オブジェクトのScreenUpdating【スクリーンアップディーティング】プロパティにFalseを設定して、画面の更新を抑止し、メモリの使用抑制と処理の高速化を実行すます。


3行目【Dim 並列1 As Long】
並べ替えの条件1番の列番号を格納する、変数「並列1」を長整数型で宣言します。


4行目【Dim 並列2 As Long】
並べ替えの条件2番の列番号を格納する、変数「並列2」を長整数型で宣言します。


5行目【Dim 改列 As Long】
改ページの基準となる項目列番号を格納する、変数「改列」を長整数型で宣言します。


6行目【Dim 印刷範囲 As Range】
印刷するセル範囲を格納する、変数「印刷範囲」をオブジェクト型(Raneg)で宣言します。


7行目【Dim i As Long】
繰り返し処理で使用する、印刷範囲の行を格納する、カウンター変数「i」を長整数型で宣言をします。


8行目【並列1 = 5】
変数「並列1」に並べ替え優先順位1番の列番号の5を代入しています。データの形式が違う場合はここの数値を変更してください。


9行目【並列2 = 1】
変数「並列2」に並べ替え優先順位2番の列番号の1を代入しています。データの形式が違う場合はここの数値を変更してください。


10行目【改列 = 5】
変数「改列」に改ページの基準となる列番号5を代入しています。データの形式が違う場合はここの数値を変更してください。


11行目【Range(“A1”).CurrentRegion.Sort Key1:=Cells(2, 並列1), key2:=Cells(2, 並列2)】
A1セルからCurrentRegion(カレントリジョン)プロパティでデータ範囲を参照しSort(ソート)メソッドでデータの並べ替えをします。並べ替え条件1番は5列目の顧客担当、2番は1列目の顧客Noです。並び順を設定する引数Order1【オーダーワン】を省略しているので、既定値の昇順の並び順になります。


12行目【Range(“A1”).CurrentRegion.Select】
再度データ範囲を参照して選択します。


13行目【Selection.Offset(1).Resize(Selection.Rows.Count – 1).Name = “database”】
12行目で選択したデータ範囲をOffset(1)で選択範囲を1段したに下げて、1行目の項目行を選択範囲から外し、選択範囲が下に1段ズレるのでResize(Selection.Rows.Count – 1)で選択範囲の最終行を-1することで、1行目の項目行を除いたデータの範囲を選択したことになります。その選択範囲にName(ネーム)プロパティで「database」と名前をつけます。


14行目【Set 印刷範囲 = Range(“database”)】
変数「印刷範囲」に13行目で設定した「database」を代入しています。印刷範囲変数はオブジェクト型の変数なので代入するときはSet(セット)キーワードが必要になります。


15行目【With ActiveSheet】
アクティブシートをWith【ウィズ】ステートメントで指定します。


16行目【.PageSetup.PrintTitleRows = “$1:$1″】
Worksheet【ワークシート】オブジェクトのPageSetUp【ページセットアップ】プロパティで参照したページ設定を表すPageSetUp【ページセットアップ】オブジェクトのPrintTitleRows【プロントタイトル】プロパティで、タイトル行を設定しています。$1:$1でセルに1行目を選択しています。これで各印刷ページに表の項目が印刷されます。


17行目【.PageSetup.PrintArea = 印刷範囲.Address】
Worksheet【ワークシーツ】オブジェクトのPageSetup【プリントセットアップ】プロパティで参照した印刷設定を表すPageSetup【プリントセットアップ】オブジェクトの印刷エリアを設定するPrintArea【プリントエリア】プロパティに、オブジェクト変数「印刷範囲」に格納されている範囲をRange【レンジ】オブジェクトのAddress【アドレス】プロパティでセル範囲のセル番地を取得してPrintArea【プリントエリア】プロパティに設定します。


18行目【.ResetAllPageBreaks】
Worksheet【ワークシート】オブジェクトのResetAllPageBreaks【リセットオールページブレークス】メソッドを使用して現在設定されている改ページをリセットします。。


20行目【For i = 2 To 印刷範囲.Rows.Count – 1】
For文で項目行の1行目を除いた2からデータ範囲の最終行の1つ手前の行までをカウンター変数のi変数に代入して、繰り返し処理の始まりです。


21行目【If 印刷範囲.Cells(i, 改列).Value <> 印刷範囲.Cells(i + 1, 改列).Value Then】
If文で上の行の顧客担当と下の行の顧客担当を比較演算子の<>(等しくない)で比較します。それを繰り返し処理で1行ずつ確認しています。


22行目【 印刷範囲.Cells(i + 1, 1).PageBreak = xlPageBreakManual】
21行目の条件 上下の行の顧客担当が等しくない時にその行の下の行に改ページを挿入しています。PageBreak【ページブレーク】プロパティの値をxlPageBreakManual【エックスエルページブレイクマニュアル】に設定しています。意味は手動で改ページを挿入するです。


25行目【ActiveWindow.View = xlPageBreakPreview】
Window【ウインドウ】オブジェクトのView【ビュー】プロパティに改ページ画面を表す定数xlPageBreakPreviewを設定して、画面を改ページプレビュー画面に設定します。


26行目【Application.ScreenUpdating = True】
止めていた画面の更新を通常状態に戻しています。

実行結果


印刷プレビューすると各ページに項目が印刷されます。


以上で、データ項目の境目に印刷改ページを挿入する方法についての解説を終了します。
ありがとうございました。

スポンサーリンク

関連記事・広告