ACCESS DSum関数で合計値を集計する方法

DSum関数で合計値を集計する方法

ACCESSで数値を扱う際、合計値を計算する場面は多々あります。

ACCESSではDSum関数という集計用関数が用意されています。

今回は、DSum関数で合計値を集計する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。

DSum関数

DSum関数は指定したレコードの特定フィールドの合計値を求めるための関数です。

以下の構文で利用します。

DSum ( フィールド名 , テーブル名 , 抽出条件 )

ポイントは、どのテーブルのどのフィールドを合計するか、さらにレコードの抽出条件まで指定できることです。

これによってかなり柔軟に合計値を求めることが可能です。

類似した関数にSum関数があります。

こちらも合計値を求める関数ですが、Sum関数ではフィールド名しか指定できません。

そのため、特定のクエリやフォーム、レポートの中にあるオブジェクトの合計値しか集計できないのですが、DSum関数では他のテーブルやクエリを参照して合計値を求めることが可能です。

利用例

いくつか利用例を示します。

TRN_売上テーブルの小計欄の合計値を求める

DSum(“小計”, “TRN_売上”)

TRN_売上テーブルの請求が「True」のレコードの小計欄の合計値を求める

DSum(“小計”, “TRN_売上”, “請求 = true”)

TRN_売上テーブルの顧客IDが変数「kokyaku_id」と同一のレコードの小計欄の合計値を求める

DSum(“小計”, “TRN_売上”, “顧客ID = ” & kokyaku_id)

このように、3つ目の引数に条件を指定することで柔軟な合計値の抽出が可能です。

3つ目の引数には変数も利用可能です。

クエリでの利用方法

では実際の利用方法をいくつか示しましょう。

サンプルテーブルとして以下のtest_売上テーブルを準備しました。

まずはクエリです。

クエリデザインからクエリを作成します。

クエリデザイン

クエリ上段のフィールドリストにtest_売上テーブルを追加し、下段のデザイングリッドにtest_売上のフィールドをすべて追加します。

これだけですとテーブルの値をそのまま表示するだけになります。

そこで一番右の空白列に、小計の合計値を表示してみましょう。

右の空白列の「フィールド」欄を選択し、上段の「ビルダー」をクリックします。

クエリビルダー

すると、ビルダー画面が表示されます。

ビルダーはクエリで複雑な計算式を記述する際に作業がしやすくするための専用画面です。

ビルダーを使わずにクエリのフィールド欄に直接書き込んでも問題ありませんが、欄が狭いので長い式を作るときはビルダーを使うと便利です。

ビルダーで下記のように記述します。


 小計合計: DSum("小計","test_売上")

OKでビルダーを閉じると、クエリの方ではこのように表示されます。

では、クエリをデータシートビューで見てみましょう。

先ほど作成した小計合計欄が一番右にできています。

VBAでの利用方法

次に、VBAでの利用方法をご紹介します。

VBAではコードにDSum関数を記載することで利用できます。

例えば、test_売上テーブルの小計を、顧客IDが変数:kokyaku_idのもののみを抽出して、変数:syokeiに格納する場合は以下の記述になります。


 syokei = DSum("小計","test_売上","顧客ID = " & kokyaku_id)

このように、DSum関数を使いこなせば、かなり柔軟に合計値を求めることが可能です。

以上、DSum関数で合計値を集計する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。