Access。累計はDSum関数を使いますが、並び替えを合わせるとうまくいきません。
<Access:DSum関数>
AccessでもExcelのように、累計を算出したい時には、どうしたらいいのでしょうか?ということで、次のようなテーブルがあります。
この金額の累計を算出したいわけですね。
作成タブのクエリデザインをクリックして、クエリを使って累計を算出します。
顧客番号以外のフィールドを使います。
そして、金額累計という演算フィールドを作っていきます。
【Accessで累計を算出するには、DSum関数】
累計を算出するには、DSum関数を使うのが便利です。DSum関数の構造は、
DSum(フィールド名,テーブルまたはクエリ名,条件式)
となっています。
なので、このような演算フィールドを作ります。
金額累計: DSum("金額","T顧客売上管理","顧客番号<=" & [顧客番号])
DSum関数の引数を確認してみましょう。
金額の累計を算出したいので、フィールド名は、「金額」
テーブル名は、「T顧客売上管理」
そして、条件ですが、"顧客番号<=" & [顧客番号]とします。
これで、4件目のレコードのときに、顧客番号<=4と条件式を設定することができるので、累計を算出することができるわけですね。
イメージとしては、Excelで、=sum($a$1:a1) のように範囲選択の開始セルを固定しておき、範囲の終点になるセルをオートフィルとともに範囲が伸びていくという方法に似ています。
では、デザインシートビューで確認してみましょう。
金額累計フィールドを確認すると、累計が算出されていますね。
ところで、金額累計フィールドですが、よくみると、左揃えになっていますよね。
つまり、【テキスト型】になってしまっています。
右揃えにしたところであくまでも、見た目が数値型っぽくなるだけですよね。
なので、数値型に変更していきましょう。
デザインビューに戻しましょう。
金額累計の演算フィールドの列を選択して、クエリツールのデザインタブにある「プロパティシート」をクリックして、プロパティシート作業ウィンドウを表示します。
標準タブの書式に『#』と入力しましょう。
たった、これだけですが、数値型になりました。
これでもいいのですが、購入日順にしたい場合、どうしたらいいのでしょうか?
【購入日を昇順にしてもダメ】
デザインビューにして、購入日フィールドに並び替えを昇順で設定すればいいのでは?と考えると思いますよね。
では、設定して、データシートビューで確認してみると、どうやら簡単にはいかないようですね。
確かに、購入日は昇順で、購入日順に並んでいるのですが、金額累計が、8201の次に31887となってしまっています。
4415の次は、1646が足された数値でなければなりませんよね。
では、どうしたらいいのでしょうか?
改めて、デザインビューに切り替えましょう。
条件式が、顧客番号を使っているのが、原因なので、並び替えることができません。
そこで、
金額累計: DSum("金額","T顧客売上管理","購入日<=#" & [購入日] & "#")
と修正しましょう。
なお、日付型なので、『#』を前後につけるのを忘れないようにしましょう。
それでは、確認してみましょう。
このように、購入日順で累計を算出してくれていますね。
最後に今回の累計ですが、条件式で使用するフィールドのデータが重複している場合には、今回の方法は使うことができませんので、注意が必要です。
なので、購入日のように重複する恐れがある場合には、事前に並び替えをしておいて、重複しないフィールドを使って累計を算出する必要があります。