ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.006

DCount、DLookUpなど定義域集合関数について

2003/2007/2010/2013/2016

Access組み込み関数の分類に「定義域集合関数」があります。

式ビルダー定義域集合関数

Excelでいうところのデータベース関数、SUMIF関数、COUNTIF関数といった条件付きの集合関数、さらにVLOOKUP関数のような該当データを取り出すことができる、Accessの関数です。

定義域集合関数には以下のような種類があり、それぞれ引数で指定したフィールドの集計または該当データを求めます。

  • DAvg … 平均
  • DCount …レコード数
  • DFirst …先頭
  • DLast … 最後
  • DLookUp … 該当データ、複数ある場合は先頭データ
  • DMax … 最大
  • DMin … 最小
  • DStDev … 定義域を母集団の標本とする標準偏差の概算値
  • DStDevP … 定義域を母集団とする標準偏差の概算値
  • DSum … 合計
  • DVar … 定義域を母集団の標本とする分散の概算値
  • DVarP … 定義域を母集団とする分散の概算値

定義域集合関数の構文は、みんな同じです。

  関数([expression], [domain], [criteria])

第1引数[expression]には集計または該当のデータを求めるフィールド名を、第2引数[domain]にはレコードのセット(定義域)、つまりテーブル名またはクエリ名を指定します。
第3引数 [criteria]は省略可能ですが、条件を設定し、条件を満たしたデータの集計や該当データを求めることができます。

これら関数は、パターンがすべて同じなのですが、書き方が少し難しいのが条件です。
以下にいろいろなケースでご案内します。

次のようなテーブル[テーブル1]があるとします。

テーブル

1. テーブル[テーブル1]の全件数

  DCount("*","テーブル1")

引数はすべて文字列式で指定します。
Dcount の場合レコードの件数で条件があろうがなかろうが特定フィールドをカウントする必要はないため、第1引数は、*(アスタリスク)でも構いませんし、テーブルの任意のフィールド名を指定しても問題ありません。
上記式の返しは、15 です。

2. 条件が数値データの場合

  DCount("*","テーブル1","得点=30")

条件設定を文字列として指定します。
上記式の返しは、3 です。

3. 条件が日付データの場合

  DAvg("得点","テーブル1","期日=#2030/1/1#")
  DLast("名前","テーブル1","期日<=#2030/4/1#")

日付は#で囲みました。
上記式の返しは、20 と ししし です。

4. 条件が文字列データの場合

  DCount("*","テーブル1","グループ='BB'")

文字列で指定する中の文字列の指定というわけで、'(クォーテーション)で囲みます。
上記式の返しは、4 です。

5. 条件が文字列データ部分一致の場合

  DMin("得点","テーブル1","グループ Like '*CC*'")

Like演算子で指定します。4の例と同じく、クォーテーションで囲みます。
上記式の返しは、10 です。

6. 開いているフォーム[フォーム1]のテキスト ボックス[テキスト1]を条件とする場合

  DCount("*","テーブル1","グループ='" & [Forms]![フォーム1]![テキスト1] & "'")

上記4の文字列データの場合の、文字の部分がコントロールに置き換わります。
コントロールは、&(アンパサンド)でつなげた書き方となります。
テキスト ボックスに AA と入力されているとき、上記式の返しは、3 です。

7. 複合条件の場合
  DSum("得点","テーブル1","グループ='BB' And グループ Like '*CC*'")
And演算子、Or演算子を入れて条件を書きます。
上記式の返しは、270 です。

8. DLookUp の場合
  DLookup("名前","テーブル1","グループ='DD'")
条件を満たすデータが複数レコードあった場合、先頭レコードのデータが返されます。
上記式の返しは、すすす です。

今回は以上ですが、条件の書き方は、数値系の場合、文字列の場合で違いますので、ご注意ください。

関連ヘルプ

2つの日付の期間を求める 《DateDiff》
数値の先頭に0を付け桁を揃えて表示する(ExcelならTEXT関数のような) 《Format》
特定の文字より左部分にある文字列を取り出す 《Left・InStr》
条件に一致するレコードの件数を求める(ExcelならCOUNTIF関数のような) 《Dcount》
文字列を半角または全角にする(ExcelのASC/JIS関数のような) 《StrConv》
特定の文字より右部分にある文字列を取り出す 《Right・Instr・Len》
twitter hatena line pocket