#729 グループごとの集計値をフォームに表示するには? クエリ、フォーム

レポートでは、そのデザイン上で”グループ化”の設定を行うことで、”グループフッター”などに各グループの小計を出力することができます。
一方、フォームの場合はすべてのレコードに対する集計値をフォームフッターに出力することはできますが、グループ化という機能がないため、グループごとの集計はできません。

そこで、フォームのレコードソースとなるクエリ上で演算フィールドを使ってグループ分け(フィールド分け)を行っておき、それらのフィールドに対してフォームフッターで集計することでグループごとの集計値を画面表示する方法です。グループ数がいくつになるか分からないようなケースではレポートの集計のようにはいきませんが、それがあらかじめ固定値として決まっている場合にはこの方法も使えると思います。


そのテーブル→クエリ→フォームの集計の流れは次のようなものになります。

■テーブル:

※この時点では当然グループごとの処理はありません。

■クエリ:

※この時点でグループごとにフィールド分けされ、それぞれ別フィールドとして出力されます。ここでは「入出荷区分」でグルーピングを行い、その値に応じて「数量」フィールドの値を「入荷数量」「出荷数量」「在庫調整数量」に分けています。

■フォーム:

※フォームフッターに各グループの小計値が出力されています。


まずクエリについては、次のような構造のものとなります。


ここでは「入出荷区分」フィールドの値は「1、2、3」の3つしかないものとし、3つの”演算フィールド”をクエリに追加します。式はそれぞれ次のようなものです。
  • 入荷数量 : IIf([入出荷区分]=1, [数量], Null)
  • 出荷数量 : IIf([入出荷区分]=2, [数量], Null)
  • 在庫調整数量 : IIf([入出荷区分]=3, [数量], Null)

たとえば「入荷数量」フィールドには、『「入出荷区分」の値が「1」なら「数量」フィールドの値を、そうでなければ「Null」を出力する』という式が設定されています。そのような条件分岐式を設定することで、「数量」フィールドには入出荷区分に関わらずすべての数量が保存されていますが、「入荷数量」フィールドには「入出荷区分=1の数量」のみが出力されるようになります。そして同様の式を「入出荷区分=2」、「入出荷区分=3」にも設定することで、ひとつの「数量」フィールドが入出荷区分値に応じて3つのフィールドに分けられることになります。


次にフォームのデザインです。


詳細セクションにはふつうに画面表示したい”各フィールドと連結したコントロール”を配置します(ここではクエリでグループ別に分けた3つのフィールドは”出力なし”としています)。

そしてこれが要点となりますが、フォームフッターに下記の演算式を持ったテキストボックスコントロールを配置します。
  • 入荷小計 : =Sum([入荷数量])
  • 出荷小計 : =Sum([出荷数量])
  • 在庫調整小計 : =Sum([在庫調整数量])
  • 合計 : =Sum([数量])

これによって、たとえば「入荷小計」テキストボックスには「入荷数量」の列だけについて”縦方向に合計した値”が出力されます。結果的にそれは「入出荷区分=1の数量」のみの”小計値”となります。

なお、最後の「合計」はよく使われる式ですが、「数量」フィールドの合計、すなわち入出荷区分に関係ない”総合計値”ということになります。


このフォームを開くことで、グループごとの集計値がフッターに表示されます。




【応用】
上記の方法を応用することで、グループごとの「件数(レコード数)」を集計することもできます。
たとえば上記の例で「入出荷区分」ごとの件数を求めたい場合、次のようにします。
  1. クエリに次のような演算フィールドを追加します。
    • 入荷件数 : IIf([入出荷区分]=1, 1, Null)
    • 出荷件数 : IIf([入出荷区分]=2, 1, Null)
    • 在庫調整件数 : IIf([入出荷区分]=3, 1, Null)
    これによって、たとえば「入荷件数」フィールドには、「入出荷区分=1」のレコードなら「1」、それ以外は「Null」と出力されます。


  2. その列の縦方向の”合計”を求めれば「入出荷区分=1の”件数”」が求められますので、このクエリをレコードソースとするフォームのフッターに下記演算式のテキストボックスコントロールを配置します。
    • 入荷件数小計 : =Sum([入荷件数])
    • 出荷件数小計 : =Sum([出荷件数])
    • 在庫調整件数小 : =Sum([在庫調整件数])
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved