MS Access Tips/Sample and VBA and Blog customize etc...

ページ毎の集計をページヘッダーに表示させる

レポートで数値型の列の集計をページ毎にページフッターに表示する方法はWEB等で検索すると見つかるのですが、この集計値をページヘッダーに表示させる方法はないでしょうか。

「Access ページ毎 集計」などのキーワードで検索すればMSのサイトを始め、いろいろなページが見つかります。が、どれも、ページフッターに表示する例です。

ページ毎の集計を取得するには、「集計実行」を利用したり、詳細のイベントで加算していったりして、ページフッターのイベントでその集計値を取得できますが、ページフッターのイベントでは、すでにページヘッダーは出力されており、そこでページヘッダーに印字するのは不可能なのです。

今回は、この不可能を可能にする方法を紹介します。さらに、以前の記事
明細を持つ伝票とその複写を同じページに2分割して表示する
のレポートの場合でもページ毎集計を表示させるサンプルも紹介します。

RptPageHeaderSum.png

難易度:

ページ毎の集計をページフッターに表示する方法

まずはページ毎の集計をページフッターに表示する方法ですが、詳細の印刷時のイベントで加算していく方法がよく紹介されてます。例えば、下記のようなコードになります。(PageSum はページフッターに配置した非連結テキストボックス, 金額 フィールドを集計する例)

レポートモジュール

これでほぼ、問題はないのですが、グループ化しているレポートで「1ページにグループをまとめる」設定にしてあると集計値が合わない場合がありますので、hatenaの場合は下記の方法を使います。

詳細セクションにテキストボックスを配置して、下記のように設定します。

プロパティ 設定値
コントロールソース 金額
集計実行 全体
可視 いいえ
名前 RunSum

レポートモジュール

ページ毎の集計をページヘッダーに表示する方法 配列格納版

実は、ページフッターでしか取得できない値をページヘッダーに表示する方法は、以前の記事
ページヘッダーに、「先頭値~最終値」を表示する
で紹介しています。これを上記の方法と組み合わせれば実現できます。

=[Pages] で総ページ数を取得するための予行イベントで取得した値を配列等に格納していく方法。上記の記事ではDictionaryを利用しましたが、今回は配列を利用してみました。

テキストボックス RunSum は、上記のものと同じ。PageSum は、ページヘッダーに配置します。コントロールソースが =[Pages] のテキストボックスも配置しておきます。

レポートモジュール

ページ毎の集計をページヘッダーに表示する方法 Printメソッド版

ページフォーマット時は、ページフッターが出力された後で発生しますので、ページ毎集計を取得できます。さらに、ここで、Printメソッドを使えば、ページ内のどこでも印字できます。PageSumテキストボックスの座標、フォント設定を反映させて、Printメソッドで、集計値を印字します。

RunSum と PageSum は配列格納版 と同じです。

さらに、ページフッターにテキストボックスを配置して、名前を「PageSum1」とします。可視は「いいえ」です。

レポートモジュール

明細を持つ伝票とその複写を同じページに2分割して表示する
のレポートにページ小計を表示するサンプルも下記のサンプルMDBに入ってますので参照してください。
RptFixRowCopiesPageSum.png

2011/06/08:Printメソッド版にバグがありましたので、修正しました。
参照 hatena の Microsoft Access 掲示板|ページヘッダーに合計を出力して途中のページから印刷した時の値

サンプルMDB が下記からダウンロードできます。
RptPageHeaderSum_07.zip (Access 2007 形式 - 1491kb)
RptPageHeaderSum.zip (Access 2002-2003 形式 - 151kb)
RptPageHeaderSum_2k.zip (Access 2000 形式 - 153kb)

拍手する

8 Comments

nagai says..."小計が 0 表示のままなのですが"

はじめまして。いろいろ探してようやく意図した形のプログラムを見つけたと思ったのですが、画面の結果表示と違ってしまう原因がわかりません。自分の環境が悪いのでしょうか?原因が皆目検討つきません。。アドバイスいただけたら幸いです。

RptPageHeaderSum.zip(この中の「R_納品書_上下」です)
で、小計の値以外はすべて正常に表示されるのですが、小計だけが0表示で計算されません。複数頁それぞれでの計算結果の表示が大事なのです。

当方の環境
 Win7Pro , Access2003 です。

ページヘッダに罫線全て配置して・・・という考え方が斬新で他のHPや参考書等に書かれている方法よりずっとわかりやすく秀逸なので(VBは全くですががんばって勉強中です。。)、ぜひこのハードルを越えたいと思っています。最終的には上下3分割(納品書控、納品書、請求書)に持って行きたいと考えています。
よろしくお願いいたします。

2013.11.17 23:37 | URL | #- [edit]
hatena says..."re:小計が 0 表示のままなのですが"

> RptPageHeaderSum.zip(この中の「R_納品書_上下」です)
> で、小計の値以外はすべて正常に表示されるのですが、小計だけが0表示で計算されません。複数頁それぞれでの計算結果の表示が大事なのです。

確認してみました。バグでした。
レポートのページフォーマット時のイベントプロシージャを下記のように変更してください。


Private Sub Report_Page()
Dim s As String
  With Me.PageSum1
    s = Format(Me!RunSum - x, .Format)

上の1行を、下記に修正してください。

    s = Format(Me.PageSum.Value, .Format)


サンプルも修正したものに差し替えておきます。

2013.11.18 11:30 | URL | #5uE6dEgY [edit]
nagai says..."re:re:小計が 0 表示のままなのですが"

> サンプルも修正したものに差し替えておきます。

やった!確かに希望通りに計算してくれています!これでなんとか目標に到達できそうな気がしてきました。もうひとがんばりしてみます。お忙しい中すぐにご返事いただき大変ありがとうございました。

2013.11.18 20:26 | URL | #- [edit]
名無し says..."re:re:re:小計が 0 表示のままなのですが"

ようやく自分なりに3分割に編集して、意図した形にできたと思いきや、印刷してみるとなぜか1ページ目の小計の値が、2ページ目で計算された小計の値にマイナスをつけた値が表示されてしまう現象になってしまいます。。。2ページ目以降がない場合は0が表示される。。。印刷プレビューでは確かに1ページ目の小計は画面表示され、値も正しいのに。。そこで上記RptPageHeaderSum.zip画面で印刷プレビューだけでなく、実際に印刷かけてみると、ちょっと違いますが似た現象になります。。「-¥133500」となります。2ページ目以降の小計は画面と印刷結果は同じです。なぜ 1ページ目の小計だけが印刷プレビューと実際の印刷結果と違ってくるのか皆目わからないのですが、再度のお願いで恐縮です、アドバイスをお願いできないでしょうか?よろしくお願いいたします。

2013.11.30 13:04 | URL | #- [edit]
hatena says..."re:小計が 0 表示のままなのですが"

レポートヘッダーで初期化する必要がありますが、レポートヘッダーが非表示になっているので初期化されていないのが原因ですね。

修正しているうちに間違ってレポートヘッダーを非表示にしてしまったようです。

レポートヘッダー/フッターを表示させて、高さは0にします。
レポートヘッダーのフォーマット時で [イベント プロシージャ] を選択して、ビルドボタンを押してください。

下記のコードを記述してください。サンプルではすでに記述してあります。

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
  x = 0
End Sub

2013.11.30 16:25 | URL | #5uE6dEgY [edit]
nagai says..."re:re:小計が 0 表示のままなのですが"

できました!すぐにご返事いただき本当に助かりました!これでなんとか今月の集計から運用できます。あらためてお礼申し上げます。

2013.11.30 21:56 | URL | #- [edit]
ひので says..."上下2分割の場合の小計が合わない"

はじめまして。いつも参考にさせていただいています。
上下2分割のレポートで小計を表示させるようにしているところです。
説明にある通りやってみたのですが、親グループの明細が複数ページにわたった時だけ、次ページの一行分まで含めて計算されてしまいます。
2ページ目以降は、前ページで計算された行を含まずに計算されます。
明細が1ページでおさまる場合は問題ないため、何が原因なのか全く分かりません。
VBAもあまり詳しくなく出来る範囲でやってみたのですが、うまくいきません。どうかアドバイスいただけないでしょうか。
よろしくお願いします。

当方の環境は、WindowsXP、Access2000 です。
RptPageHeaderSum_2k内のR_上下納品書を参照しています。

2014.01.07 13:49 | URL | #/jROnekQ [edit]
ひので says..."解決しました!"

先日問い合わせしていた件ですが、色々といじくっていたら解決できました。
グループ化のプロパティ設定がおかしかったようです。
お騒がせしました。

2014.01.14 15:53 | URL | #/jROnekQ [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/263-c444bcd4
該当の記事は見つかりませんでした。