このエントリーをはてなブックマークに追加

データの無い所にも罫線を引く~其の壱 (Accessレポート)

Access 2010バージョンのレポートを使って、データの一覧表を表形式で作成しています。ここでは、サンプルとして都道府県と県庁所在地の一覧表を作っています。

「レポートの作成」ページリンク

都道府県一覧表こちらの表では、一行ごとに罫線を引くようにしています。しかし、最終ページでは、データが最後まで終わると、その後は、空白となり罫線も引かれなくなります。今回は、この真っ白な部分(データの無い空白部分)にも罫線を引いていきたいと思います。そうすることにより、ページ上に真っ白な部分を無くし、見栄え良く整えるようにします。では、これを作成していくうえで、いくつかポイントがありますので、順番に見ていきたいと思います。

改ページの挿入

まず一つ目のポイントが、「改ページ」を入れることです。ちなみに上の表では改ページは入れていません。次のページに移る時は、設定されているページのサイズ(A4,B5など)に合わせて自動的に次のページに移るようになっています。通常はこれで、最後までデータを表示していき、とくに問題はありません。ですが今回は、この「改ページ」を入れることは必須条件となり、「改ページ」を入れないと最終的に正しく表示させることができなくなってしまいます。
では、実際に挿入していきます。まず、レポート、(ここでは、「R_都道府県」)を右クリックして、「デザインビュー」を選択します。

レポートデザイン

レポートをデザインビューで開いたら、「レポートデザインツール」から、「改ページ」を挿入します。

改ページを入れる場所は、レポートの「詳細」セクションの一番下のところに配置します。このレポートでは、右側のプロパティシートの「詳細セクション」の「書式」タブを見るとわかりますが、詳細セクションの「高さ」は、0.9cm(表示は自動的に0.899cmとなりました)に設定しています。

改ページデザイン次に、この改ページの位置を正確に設定するために、プロパティシートの「選択の種類」から、「改ページ1」を選択し、「書式」タブを選択して、「上位置」を詳細セクションの高さと同じ、「0.9cm」に設定します。「左位置」は「0cm」にしておきます。ここで、詳細セクションの高さと、改ページの上位置の数値を揃えておくことで、改ページを詳細セクションの一番下部分に配置することができます。ここでもし、改ページの下部分に空白ができてしまうと、後で、正確に表示されなくなってしまうので、改ページの下部分に隙間ができないように配置します。

改ページデザイン

ここで一度、レポートを印刷プレビューで表示してみます。今、詳細セクションの最下部に改ページを入れましたので、データを一行表示させるごとに、次ページに移っていくようになります。ただし、最終的にはページいっぱいにデータを表示させるので、それはこれからVBAを使って制御していきたいと思います。

 

都道府県一覧表

NextRecordプロパティ

ではここからは、VBAのNextRecordプロパティを使って、レポートの表示を制御していきたいと思います。まず、NextRecordプロパティについて、簡単に説明しますと、NextRecoedプロパティは、Trueかfalseを使って、レコードを制御していきます。

NextRecord = True 次のレコードに進みます(通常の動き)。
NextRecord = False 次のレコードに進まず、もう一度同じレコードを繰り返します。

そして、VBAで次の二つの数をカウントして、それを比べていきます。

1) レコードの件数をカウントする。
2) レポート上に表示される行数をカウントする

ではまず、レポートヘッダーセクションにVBAを記述します。まずレポートをデザインビューで開いて、レポートヘッダーを作ります。ページヘッダーのセクションセレクタを右クリックして、「レポート ヘッダー/フッター」をクリックします。

レポートヘッダー

そうすると、新たにレポートヘッダーセクションが作られますので、プロパティシートの「イベント」タブを選択します。そして、フォーマット時の右端にあるビルドボタンをクリックします。「ビルダーの選択」ダイアログから「コードビルダー」を選択して「OK」ボタンをクリックします。

レポートヘッダー

VBE(コードを記述するウィンドウ)が表示されます。始めにVBEの冒頭部分に二つの変数を宣言します。

hensuこの3行目と4行目が変数の宣言です。3行目の変数「GYO」にレポート上に表示される行数を格納します。4行目の変数「DAT」にはレコードのデータ数を格納します。データ型はどちらも「Integer」(整数)とします。

レポートヘッダーには、まず、変数「GYO」の初期値として「0」を格納します。次に、変数「DAT」には、データが入っている「“Q_都道府県”」のレコード数を「DCount関数でカウントした数を格納させます。

これで、変数「GYO」と変数「DAT」には、それぞれ値が格納されました。では、今回のサンプルレポートでは、レポートヘッダーセクションにVBAは記述しましたが、レポート上には何も表示させませんので、レポートのデザインビューから、レポートヘッダーの「高さ」を「0cm」設定します。

次にレポートはデータ内容がある「詳細」セクションを表示させますので、ここにもVBAを記述していきます。ここで、先ほど少し触れました、「NextRecord」プロパティと新たに「Mod演算子を使って制御していきます。「Mod」演算子とは、2つの数値、「数値1」を「数値2」で割ったときの余りを返す演算子です。例えば、「19 Mod 7」の場合は、19を7で割った余りを返すので、結果は「5」となります。この演算子を利用していきます。ではまず、「詳細」セクションの1行目ですが、レコードを表示させるごとに行数をカウントしていきます。


変数「GYO」の初期値は「0」を入れてあるので、レコードを一件表示させるごとに「1」、「2」というふうに数値が「1」ずつ、加算されていき、行数をカウントすることができます。

Mod演算子

先ほど、「詳細」セクションの最下部に「改ページ」を配置しましたが、今の状態では、1ページに一件ずつしかレコードが表示されません。そこで、あらかじめ1ページに表示させるレコードの件数を決めてしまいます。このサンプルレポートでは、ページサイズを「B5」に設定しており、このサイズに収まる件数は1ページ当たり20件です。ですので、行数が20件になるごとに、「改ページ」を有効にして、それ以外は「改ページ」が無効になるように設定します。

ここで、「詳細_Format」イベントの5行目から9行目を追加します。変数「GYO」を20で割ったときの余りが「0」のとき、つまり、レポートに表示される行数が20行、40行、のときに「改ページ」を有効にします。それ以外のとき、「GYO」を20で割ったとき余りが「0」以外のときには「改ページ」を無効にします。If_Then_Elseステートメントで条件を分岐させて、「Me.改ページ1.Visible = True」で有効、「Me.改ページ1.Visible = False」で無効にする処理を行っています。

ここで、ひとつポイントがあります。「GYO Mod 20 =0」のときに「改ページ」を有効にしていますが、最終ページのときだけに関しては、「改ページ」が無効になるように設定します。理由は、レポートフッター部分になにかを表示をさせている場合に、最終ページの詳細部分に改ページを入れてしまうと、最後のレポートフッター部分だけが、次のページに移ってしまうからです。

ではここで、「If GYO Mod 20 =0 Then」のとき、更に条件分岐を加えます。最終ページというのは、「GYO > DAT」のとき、つまり、レポートの行数がレコードのデータ数を超えているとき、そして、「GYO = DAT」のとき、つまり、レポートの行数とレコード数がちょうど一致したときです。下の「詳細_Format」イベントの6行目から10行目と、12行目を追加します。

ここまでで、「改ページの」制御ができたので、次の記事

データの無い所にも罫線を引く~其の弐

で「NextRecord」プロパティを使って、データの表示を制御していきたいと思います。

このエントリーをはてなブックマークに追加

コメントを残す

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

コメントフィード

トラックバックURL : http://gyoumuka.work/wp-trackback.php?p=1271

PAGE TOPへ戻る