3/07/2019

Access。累計はDSum関数を使いますが、並び替えを合わせるとうまくいきません。【SORT】

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顧客売上管理","購入日<=#" & [購入日] & "#")
と修正しましょう。

なお、日付型なので、『#』を前後につけるのを忘れないようにしましょう。

それでは、確認してみましょう。

このように、購入日順で累計を算出してくれていますね。

最後に今回の累計ですが、条件式で使用するフィールドのデータが重複している場合には、今回の方法は使うことができませんので、注意が必要です。

なので、購入日のように重複する恐れがある場合には、事前に並び替えをしておいて、重複しないフィールドを使って累計を算出する必要があります。