DSum・DCount・DAvg・DLookUpでAccessフォームに動的集計を表示する|引数の書き方・実務5パターンとMOS試験対策

Accessのドメイン集計関数(DSum・DCount・DAvg・DLookUp)は、フォームやレポートのテキストボックスに直接集計値を表示できる特別な関数です。クエリを別途作成せずとも、フォーム上のコントロールに式を入力するだけで、テーブル全体や特定条件に合致するレコードの合計・件数・平均・特定値を動的に取得できます。

「受注フォームに『今月の受注合計金額』を表示したい」「顧客一覧フォームに『各顧客の未払い件数』をリアルタイムで出したい」といった要求に、ドメイン集計関数は最も直接的な解決策です。クエリを組み合わせるアプローチより実装ステップが少なく、フォームのデザインビューでコントロールソースに関数を書くだけで完成します。

本記事ではDSum・DCount・DAvg・DLookUpの4関数について、引数の構文・抽出条件の書き方・フォームやレポートへの配置手順・実務5パターン・よくあるエラーの対処法を解説します。MOS Access試験での出題傾向と頻出チェックリストも収録しているので、試験対策にもご活用ください。

目次

ドメイン集計関数とは何か――クエリ集計との違い

Accessのドメイン集計関数は「テーブルやクエリ(=ドメイン)を対象に、条件を指定して集計値を1つ返す」関数群です。Excelの SUMIF / COUNTIF に似た発想ですが、Accessではフォーム・レポート・マクロの任意の場所から呼び出せるのが特徴です。

関数戻り値Excelの近似関数主な用途
DSum条件に合うレコードの合計SUMIF売上合計・経費合計
DCount条件に合うレコードの件数COUNTIF受注件数・未払い件数
DAvg条件に合うレコードの平均AVERAGEIF平均単価・平均納期日数
DLookUp条件に合う最初のレコードの特定フィールド値VLOOKUP顧客名引き・最新ステータス取得
DMin / DMax最小値 / 最大値MINIFS / MAXIFS最古の受注日・最高単価

クエリで集計する方法との主な違いは「クエリオブジェクトを別途作らなくてよい」点です。ただし、ドメイン集計関数はレコードごとに評価されるためデータ量が多いと処理が遅くなる場合があります。数万件超のテーブルを頻繁に集計する場合はクエリ+サブフォームの構成を検討してください。

共通構文――3つの引数の読み方

DSum・DCount・DAvg・DLookUpはすべて同じ引数構造を持ちます。

=DSum("フィールド名", "テーブル名またはクエリ名", "抽出条件")
=DCount("フィールド名", "テーブル名またはクエリ名", "抽出条件")
=DAvg("フィールド名", "テーブル名またはクエリ名", "抽出条件")
=DLookUp("フィールド名", "テーブル名またはクエリ名", "抽出条件")
引数入力内容注意点
第1引数:フィールド名集計対象または取得するフィールドの名前を文字列(ダブルクォート)で指定フィールド名に空白や日本語が含まれていても角括弧は不要。ただしスペースが含まれる場合は角括弧で囲む:"[フィールド 名]"
第2引数:テーブル/クエリ名集計対象のテーブルまたはクエリの名前を文字列で指定名前が正確に一致しないとエラー。テーブル名・クエリ名はナビゲーションウィンドウで確認する
第3引数:抽出条件WHERE句に相当する条件式を文字列で指定(省略可)省略すると全レコードが対象。文字列・数値・日付・フォームコントロール参照の書き方がそれぞれ異なる(後述)

DCountの第1引数にはフィールド名の代わりに "*"(アスタリスク)を使うとすべてのフィールドをカウント対象にできます。Nullを含む件数も数えたい場合に便利です。特定フィールドのNull以外の件数が欲しい場合はフィールド名を指定します。

DSum関数――合計を取得する

DSum は「受注金額テーブルの合計を受注フォームに表示する」「特定顧客の累積売上をサマリーフォームに表示する」など、金額・数量の合計を返す場面で使います。

DSum の基本例

やりたいこと
受注テーブル全件の金額合計=DSum(“金額”,”受注テーブル”)
ステータスが「未払」の金額合計=DSum(“金額”,”受注テーブル”,”ステータス=’未払'”)
2026年の受注金額合計=DSum(“金額”,”受注テーブル”,”受注日 >= #2026/01/01# And 受注日 < #2027/01/01#”)
特定顧客の累積金額(顧客IDをフォームコントロールから参照)=DSum(“金額”,”受注テーブル”,”顧客ID=” & [顧客IDテキスト])

フォームコントロール参照の書き方

同一フォーム上の別コントロール(例:[顧客ID]テキストボックス)の値を抽出条件に使う場合、引数を文字列として連結する方法が基本です。

=DSum("金額", "受注テーブル", "顧客ID=" & [顧客ID])

顧客IDが数値型の場合は上記のように & で連結するだけです。顧客IDが文字列型の場合はシングルクォートで囲む必要があります。

=DSum("金額", "受注テーブル", "顧客コード='" & [顧客コード] & "'")

別フォームのコントロールを参照する場合は Forms![フォーム名]![コントロール名] の形式で指定します。

=DSum("金額", "受注テーブル", "顧客ID=" & Forms![顧客一覧フォーム]![顧客ID])

DCount関数――件数を取得する

DCountは「特定顧客の未払い件数」「今月の新規申込件数」など、条件に合うレコードの数を返します。

やりたいこと
受注テーブルの全件数=DCount(“*”,”受注テーブル”)
ステータスが「未払」の件数=DCount(“*”,”受注テーブル”,”ステータス=’未払'”)
特定顧客の受注件数=DCount(“*”,”受注テーブル”,”顧客ID=” & [顧客ID])
今月の受注件数=DCount(“*”,”受注テーブル”,”Year(受注日)=” & Year(Date()) & ” And Month(受注日)=” & Month(Date()))
担当者フィールドが空でないレコード数=DCount(“担当者”,”受注テーブル”)

"*" はすべてのフィールドが対象なのでNullを含む行もカウントします。特定フィールドのNull以外の件数を数えたいときはフィールド名を第1引数に指定します(Nullのレコードはカウントから除外されます)。

DAvg関数――平均を取得する

DAvgは「商品カテゴリ別の平均単価」「担当者別の平均受注金額」など、数値フィールドの平均を返します。Nullのレコードは自動的に除外されます(ExcelのAVERAGEと同じ動作です)。

やりたいこと
全受注の平均金額=DAvg(“金額”,”受注テーブル”)
カテゴリ「電子機器」の平均単価=DAvg(“単価”,”商品テーブル”,”カテゴリ=’電子機器'”)
担当者ごとの平均金額(担当者をコントロールから参照)=DAvg(“金額”,”受注テーブル”,”担当者='” & [担当者名] & “‘”)
過去1年間の平均受注金額=DAvg(“金額”,”受注テーブル”,”受注日 >= #” & Format(DateAdd(“yyyy”,-1,Date()),”yyyy/mm/dd”) & “#”)

DLookUp関数――特定フィールド値を取得する

DLookUpは条件に合う最初のレコードから指定フィールドの値を1つ返します。ExcelのVLOOKUPに最も近い関数で、「商品IDから商品名を引く」「最新受注の担当者名を表示する」といった用途に使います。

やりたいこと
商品IDから商品名を取得=DLookUp(“商品名”,”商品テーブル”,”商品ID=” & [商品ID])
顧客コードから会社名を取得(文字列型ID)=DLookUp(“会社名”,”顧客テーブル”,”顧客コード='” & [顧客コード] & “‘”)
最新の受注番号(降順1件目)=DLookUp(“受注番号”,”受注テーブル”,”受注番号=” & DMax(“受注番号”,”受注テーブル”))
社員IDから部署名を取得=DLookUp(“部署名”,”社員テーブル”,”社員ID=” & [社員ID])

DLookUpは抽出条件に合うレコードが複数ある場合、その中で主キーや記録順が最初のレコードを返します(並べ替え順は保証されません)。「最新の○○を取得したい」場合はDMaxやDMinと組み合わせて主キー値を特定してからDLookUpを呼ぶか、クエリで並べ替えた結果をDLookUpのドメインに指定します。

第3引数「抽出条件」の書き方パターン

ドメイン集計関数で最もミスが多い箇所が第3引数の抽出条件です。データ型によってクォートの有無・囲み方が変わります。

データ型別 抽出条件の書き方

データ型条件の書き方
数値型(整数・小数)クォート不要。数値をそのまま書く“顧客ID=101”
テキスト型・短いテキスト値をシングルクォートで囲む“ステータス=’未払'”
日付/時刻型値をシャープ(#)で囲む“受注日=#2026/06/23#”
Yes/No型(ブール)True/False または -1/0 を使う“承認済=-1” または “承認済=True”
フォームコントロール(数値)コントロール参照を & で文字列連結“顧客ID=” & [顧客ID]
フォームコントロール(文字列)コントロール参照をシングルクォートで囲んで連結“顧客コード='” & [顧客コード] & “‘”
フォームコントロール(日付)コントロール参照をシャープで囲んで連結“受注日=#” & Format([受注日],”yyyy/mm/dd”) & “#”
AND条件(複数条件)And で接続“ステータス=’未払’ And 顧客ID=101”
OR条件Or で接続“ステータス=’未払’ Or ステータス=’督促中'”
Like条件(部分一致)Like と * を使う“商品名 Like ‘電子*'”

日付をフォームコントロールから動的に参照する場合、Format 関数で "yyyy/mm/dd" 形式に変換してからシャープで囲むのが安全です。Access内部の日付形式がロケールによって異なるため、Format を使わずに連結すると環境によっては認識されないことがあります。

フォーム・レポートへの配置手順

フォームのテキストボックスに配置する手順

手順操作補足
① フォームをデザインビューで開くナビゲーションウィンドウでフォームを右クリック→「デザインビュー」既存フォームへの追加でもOK
② テキストボックスを挿入「フォームデザイン」タブ→「コントロール」グループ→「テキストボックス」を配置したい場所にドラッグラベルが自動で追加される
③ コントロールソースに式を入力テキストボックスを選択→プロパティシート→「データ」タブ→「コントロールソース」欄に式を入力= から始める(例:=DSum(“金額”,”受注テーブル”,”顧客ID=” & [顧客ID]))
④ 書式を設定(任意)プロパティシート→「書式」タブ→「書式」欄で通貨・パーセント等を選択金額ならば「通貨」を選択するとカンマ区切りになる
⑤ フォームビューで確認「表示」→「フォームビュー」に切り替えて値が表示されているか確認#Error が出た場合は式の誤りを確認する

フォームのフッターに集計表示テキストボックスを配置すると、フォームの最下部に常時表示されて視認性が高まります。フォームヘッダーやメインセクションへの配置も可能ですが、連続フォームの場合はフッターが1か所で済むため管理しやすくなります。

レポートへの配置

レポートでも同じ手順でテキストボックスのコントロールソースにドメイン集計関数を入力できます。レポートのグループフッターに =DSum("金額","受注テーブル","担当者='" & [担当者] & "'") のように配置すると、グループごとの合計をサマリー行に出力できます。ただし、レポートのグループ集計であればレポート自体の集計機能(集計フィールドのコントロールソースに =Sum([金額]) を使う方法)の方がパフォーマンスは高くなります。

実務5パターン――よく使われるシナリオ

シナリオ使う関数配置場所式の例
顧客詳細フォームに「この顧客の累積受注金額」を表示DSumフォームのメインセクション=DSum(“金額”,”受注テーブル”,”顧客ID=” & [顧客ID])
受注一覧フォームのフッターに「未払い件数」を表示DCountフォームフッター=DCount(“*”,”受注テーブル”,”ステータス=’未払'”)
商品詳細フォームに「このカテゴリの平均単価」を表示DAvgフォームのサブセクション=DAvg(“単価”,”商品テーブル”,”カテゴリ='” & [カテゴリ] & “‘”)
受注フォームのテキストボックスに「商品ID入力時に商品名を自動表示」DLookUp商品ID隣のテキストボックス=DLookUp(“商品名”,”商品テーブル”,”商品ID=” & [商品ID])
帳票フォームのフッターに「選択中の担当者の月次受注件数」を表示DCountフォームフッター=DCount(“*”,”受注テーブル”,”担当者='” & [担当者] & “‘ And Month(受注日)=” & Month(Date()))

よくあるエラーと対処法

エラー表示原因対処法
#Error関数名・引数の文字列・テーブル名のスペルミス、または参照先コントロールが存在しないプロパティシートで式を再確認。テーブル名はナビゲーションウィンドウで正確にコピーして貼り付ける
#Name?関数名が認識されていない(日本語環境でのスペルミスが多い)DSum・DCount などを半角英字で入力しているか確認。スペースが混入していないかチェックする
Null(何も表示されない)抽出条件に合うレコードがゼロ件、または全レコードが対象フィールドにNullを持つ条件が正しいか確認。表示を「0」にしたい場合は Nz 関数でNull→0変換:=Nz(DSum(…)、0)
型の不一致エラーテキスト型フィールドにシングルクォートなしで条件を指定しているテキスト型はシングルクォートで囲む(”フィールド=’値'”)。数値型はクォート不要なので混同しないよう注意
フォームを開くたびに遅いデータ量が多いテーブルをドメイン集計関数が毎回フルスキャンしている集計対象フィールドにインデックスを設定する。またはクエリ+サブフォームの構成に変更する

Nz 関数は =Nz(DSum("金額","受注テーブル","ステータス='未払'"), 0) のように使い、DSum がNullを返したときに代わりの値(ここでは0)を返します。金額表示では「何も表示されない」よりも「0円」と表示する方がユーザーにとって直感的です。

MOS Access試験での出題傾向と対策

MOS Access 365&2019では、ドメイン集計関数は「フォームまたはレポートのコントロールにデータを集計する」スキル区分で出題される可能性があります。特に DSum・DCount・DLookUp を使ったコントロールソースの設定が問われます。

  • DSum を使った合計表示:フォームフッターのテキストボックスのコントロールソースに =DSum(“フィールド名”,”テーブル名”,”条件”) を正確に入力できるか。フィールド名・テーブル名のスペルと引用符の位置を確認する
  • DCount を使った件数表示"*" とフィールド名の使い分け(Null扱いの差異)を理解しているか。条件なしの全件カウントと条件ありの絞り込みカウントを正しく書けるか
  • DLookUp を使った値の引き出し:コントロールを参照する第3引数の連結構文(数値型は & 連結のみ、文字列型はシングルクォートで囲む)を正確に書けるか
  • コントロールソースへの入力手順:デザインビューでプロパティシートを開き、「データ」タブの「コントロールソース」欄に = から始まる式を入力してフォームビューで確認するまでの操作を流れで実行できるか
  • Nzによるエラー対策:=Nz(DSum(…)、0) のように組み合わせて Null が返る場合のデフォルト値を設定できるか

MOS試験の出題傾向別チェックリスト

出題領域確認すべき操作難易度
DSumでフォームフッターに合計表示テキストボックス→コントロールソース→=DSum(“フィールド”,”テーブル”,”条件”) 入力→フォームビュー確認★★☆
DCountで件数表示(条件あり)第1引数に “*” または フィールド名を使い分け→第3引数で条件式を正確に記述★★☆
DLookUpで関連テーブルの値取得第3引数でコントロール参照を & で連結→数値型・文字列型の書き方の違いを理解★★★
Nz 関数との組み合わせ=Nz(DSum(…)、0) の構文でNull時のデフォルト値を設定★★★
日付型条件の指定日付をシャープで囲む・Format関数で形式を統一する★★★

まとめ

ドメイン集計関数(DSum・DCount・DAvg・DLookUp)はAccessのフォームやレポートに動的な集計値を埋め込む最も手軽な手段です。3つの引数(フィールド名・テーブル名・抽出条件)の構造を理解し、データ型に応じたクォートの使い方を覚えることが習得のカギです。

抽出条件でフォームコントロールを参照するときの & 連結と型別のクォート規則は、最初は複雑に見えますが、数値・テキスト・日付の3パターンを1つずつ実際に入力して動作確認すると短時間で身につきます。エラーが出たときは #Error・Null・型不一致の3種類に分類して原因を探る習慣をつけてください。

MOS Access試験では「フォームのコントロールに集計値を表示する」問題でドメイン集計関数が問われます。デザインビュー→プロパティシート→コントロールソースへの式入力→フォームビューで確認という一連の手順を繰り返し練習し、確実に得点できる範囲として定着させましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次