【Access関数】DSum関数の使い方|構文・具体例

入門講習

DSum関数は、テーブルやクエリのレコードの値を合計することができる関数です。この記事では、基本的な構文や、具体的な使い方について解説します。

なお、こちらの記事では関数の基礎知識と共に、Accessで使用できる主な関数を紹介していますので、併せて参考にしてください。

DSum関数とは

DSum関数は「定義域集計関数」と呼ばれる一族のひとつで、
指定したテーブル(またはクエリ)の中から、条件に一致するレコードの合計値を返す関数 です。

最大の特徴は、今開いているフォームやクエリとは別のテーブル(またはクエリ)の値を合計して参照できる
という点です。

通常のクエリでは、集計行の「合計」(SQLではSUM())を設定することで合計値を求めることができますが、これは同じデータソース内(同じクエリ結果や同じフォームのレコードセット)でしか集計できません。

しかし DSum関数は、

  • 「売上フォームから、別テーブルの入金記録を合計したい」
  • 「レポート内で、このレコードとは別のテーブルにある数値を合計して表示したい」
  • 「VBA の中で必要なときだけ、別テーブルから合計値を取得したい」

といった テーブル間のデータを横断した合計の取り出しを行うことができます。

フォーム・レポート・VBA・単独のクエリ問わず、必要な場面でピンポイントに合計値を取得できる柔軟さが、DSum関数の大きなメリットです。

構文

基本構文

DSum(合計する対象項目,対象テーブル(クエリ)[,抽出条件]

各引数の内容は次のとおりです。

引数必須/省略内容
合計する対象項目必須合計の対象となるフィールド名、または計算式
対象テーブル必須データを取りに行くテーブル名・クエリ名
抽出条件省略可どのレコードを合計するかを指定する条件

具体例

次のテーブルを元に、DSum関数でレコードを集計する具体例を解説します。

【T_売上管理テーブル】

サンプルテーブル

基本的なパターン

DSum("売上金額", "T_売上管理")

【解説】

抽出条件を指定していないため、指定したテーブル(T_売上管理)の売上金額フィールドの全レコードを合計します。

上記関数を実行すると、76,000円が返されます。

抽出条件(文字列)を指定したパターン

DSum("売上金額", "T_売上管理","支店 = '大阪'")

【解説】

抽出条件を指定したパターンです。例は「支店」フィールドに対して、大阪が格納されているレコードのみ売上金額を合計するパターンです。例のように文字列を抽出条件に指定する場合は、値を'(シングルコーテーション)で囲む必要があります。

上記関数を実行すると、大阪の2レコードが集計され、22,000が返されます。

抽出条件(日付)を指定したパターン

DSum("売上金額", "T_売上管理", "売上日 >= #2025/12/1#")

【解説】

次は抽出条件に日付を指定したパターンです。例は「売上日」フィールドに対して、2025/12/1以降のレコードのみ集計するものです。日付を抽出条件に指定する場合は、値を#(シャープ)で囲む必要があります。

上記関数を実行すると、全6レコード中、2025/12/1以降の売上は1件であるため、15,000が返されます。

計算式の結果を合計するパターン

DSum("[売上金額] * 1.1", "T_売上管理", "支店='大阪'")

【解説】

DSum関数は、合計する対象をフィールド名だけでなく「式」でも指定することができます。

たとえテーブルに税込金額などのフィールドが無くても、DSum関数の中で計算式を指定すれば、その計算結果を合計することができます。

今回の例では、大阪支店のレコードに対して、売上金額フィールドの値に10%を加算したテーブルを合計し、 税込金額(10%)として求めています。

上記関数を実行すると、24,200円が返されます。

使用例

フォーム上で合計値を表示する

フォームに配置したテキストボックスのコントロールソースにDSum関数を設定することで、フォームに複数のテーブル(クエリ)を元にした値を反映させることができます。

【具体例】

=DSum("売上金額", "T_売上金額累計", "支店 = '" & [テキスト10] & "' AND 年 = Year(Date())")

【解説】

テキストボックス(テキスト10)に支店名を入力すると、フォーム上にはその支店の今月の売上実績が表示され、画面下部には同じ支店の年間累計売上金額が表示されるようになっています。

今月分の売上と累計売上金額は、次のように別々のテーブルに保存されています。

  • 今月の売上実績…T_売上管理テーブル
  • 売上金額累計…T_売上金額累計テーブル

このように、複数のテーブルに分かれているデータを集計し、フォームに表示したい場合にDSum関数は非常に便利です。本例では、テキストボックス(テキスト11)にDSum関数を設定することで、指定した支店の年間累計売上金額を表示しています。

VBAの中で使用する

VBAでDSum関数を使うケースとしては、取得した合計値を判断式などで利用することが多いです。

【具体例】

Dim total As Long
total = DSum("売上金額", "T_売上管理", "支店='" & Me!支店名 & "'")

If total > 20000000 And IsNull(Me!承認者) Then
    MsgBox "売上が規定値を超えたため、承認者を入力してください。", vbExclamation
    Cancel = True
End If

【解説】

本例は、売上金額が一定額を超えたら、承認者入力が必須である旨のメッセージを表示するものです。
このようにIF文などの判断式で使用する条件を取得するために、DSum関数はよく使われます

まとめ

DSum関数の特徴をまとめます。

  • 条件付きで合計値を取得したい
  • 別テーブルの数値を集計して参照したい
  • フォームやレポートでも柔軟に使いたい


構文の仕組みはDCount関数など、他の定義域集計関数と同様ですので、ぜひ、Accessツール開発でも活用してみてください。


・Accessで業務用ツールを作ってみたいけど、なかなか時間がとれない。
・先輩が作った既存のツールを改修したいけど難しい…。
そのような場合には、私がみなさまの代わってカタチにいたします。ぜひ作成サービス
をご利用ください。

オーダーメイドのAccessツールをお作りします ふんわりした相談からでもOKです! | ココナラ
Accessに関する様々なご要望に対応いたします。日頃このようなお悩みやありませんか?✅業務用ツールの新規開発や改修が必要 ✅既存のAccessツールが使いに...
タイトルとURLをコピーしました