<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > レポートでページ合計
   1 2



レポートでページ合計

今回は、フォームではなくてレポート内で動かすプロシージャを作ってみましょうかね。
基本的には、フォームと同じです。
レポートでも「イベント」という考え方があり、なんかのきっかけでプロシージャが動くようします。
ただ、フォームに比べると、レポートって「動き」のないものなので(紙に印刷した後じゃどうしようもないから「クリック時」「更新後処理」なんてイベントは存在しないし)、あんまりこまごまとしたプロシージャを作ることはないかもしれないですね。

ではまず、一般的なレポートの「構造」を見てみましょう。

レポートの場合は、テキストボックスなどのコントロールひとつひとつに対してではなく、「セクション」というものがターゲットになることが多いです。
セクションというのは、こういうグレーの部分から下のところですね。赤線で印をしているところです。
このグレーの部分をダブルクリックすると、そのセクションのプロパティが出てきます。
「イベント」っていうところ、ありますよね。

これらのどこかに、プロシージャを作成することになるかと思います。
あるいは、レポート全体か・・・フォームと同じで、左上のレポートセレクタボタンをダブルクリック(プロパティが既に出ているときはクリックでも)すれば、レポート全体のプロパティが出てきます。

どのプロパティを見ても、イベントの数はそんなにないですよね。



では・・・。何か作ってみましょう。
レポートでは通常できないことを、VBAでやってみようということで・・・。「ページ合計」を出してみましょうかね。
金額や個数の合計とか、件数のカウントなんかをヘッダーフッター部分に出したい場合の話なんですが、フォームだと、テキストボックス作って、Count関数とかSum関数なんかで出すことができますよね。
例えば、こんなテーブル(これはクエリなんですが、まあ、こういう結果を得ることができる状態で)があったとしまして、

仮に、こんな感じの一覧を印刷するレポートを作ってあったとします。

で、このレポートのデザインは大体こんな感じなんですけどね。

売上金額の合計を出したいなぁと思ってます。



レポートの、一番最後にあたる「レポートフッター」部分に非連結のテキストボックスを置いて、このテキストボックスのコントロールソース欄にSum関数を使えば、

  (実際には、プロパティでこう入力する↑)

   (ついでに、書式も設定しとく)

最後のページの最後のレコードの次のところに、全データの合計金額が出ます。


また、「分類」ごとに合計を出すこともできますね。

これには、「グループ化」という設定が必要です。ツールバーの「並べ替え/グループ化」ボタンをクリックします。

出てきたウィンドウに、「分類」ごとに並べ替えをするように指定をします。
さらに、「グループフッター」というものを出しておきます。

そうすると、「分類フッター」というセクションが新しく追加されます。
ここに、さっきのSum関数を入れたテキストボックスをドラッグして移すと、

わかりにくいですが・・・。
分類ごとにデータが並ぶようになって、さらにそれぞれの分類の最後に、合計金額が出るようになるわけです。



でも・・・。
各ページの最後に、ページ合計を・・・と思っても、これ、できないんですよ。
ページフッターにSum関数持ってきても・・・。



エラーになります。なんだエラーって!!!



なんでですかねー。でも、こういうもんなんです。できないんですよ。

そこで、ページフッター部分に、ページ合計を出したい場合のやり方です。
でも・・・ほんとうは、リレーショナルデータベースで「ページ合計」って、あんまり意味がないような気がするので・・・たとえば、レポートの「詳細セクション」の高さとかによって、1枚に印刷できる件数が変わってくるわけですよね。こういうの、データベースでは、集計を取るタイミングとして有効とは、考えないんです。
たとえばグループ化をしてグループごとの合計とかなら、意味があると思うんですけどね(グループごとに改ページすればよいのだし)。なので、もしページ合計を出さなくちゃならなくなった場合は、ほんとうにページ合計が必要なのかどうか、じっくり検討してみてください。
時には、やらなくちゃならない場合もあると思いますので、そういう場合は次の方法にチャレンジしてみてください。