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'")
条件を満たすデータが複数レコードあった場合、先頭レコードのデータが返されます。
上記式の返しは、すすす です。
今回は以上ですが、条件の書き方は、数値系の場合、文字列の場合で違いますので、ご注意ください。