Accessでは、「定義域集合関数」といって、条件に該当するデータの検索や集計ができる関数があります。
例えば、タイトルに掲げたDLookup関数(値の検索)やDCount関数(件数のカウント)などです。
これらの関数では、抽出条件を記述するのに以下の注意点があります。
知らないとハマりますので、具体例を挙げて説明いたします。
- 条件全体をダブルクォーテーション「”」で囲む
- 文字列はシングルクォーテーション「’」で囲む
- 日付・時刻はシャープ「#」で囲む
- 変数はダブルクォーテーション「”」の外に出して「&」でつなげる
定義域集合関数とは
定義域集合関数には以下のような種類があり、条件に該当するデータの集計や検索が出来ます。
関数名 | 用途 |
---|---|
DAvg | 平均 |
DCount | レコード件数 |
DFirst | 先頭のデータ |
DLast | 最後のデータ |
DLookUp | 条件に該当するデータ(複数ある場合は先頭データ) |
DMax | 最大値 |
DMin | 最小値 |
DStDev | 定義域を母集団の標本とする標準偏差の推定値 |
DStDevP | 定義域を母集団とする標準偏差 |
DSum | 合計 |
DVar | 定義域を母集団の標本とする分散の推定値 |
DVarP | 定義域を母集団とする分散 |
定義域集合関数の構文
定義域集合関数の構文は、全て共通です。
関数(フィールド名, テーブル名またはクエリ名, 条件)
- 全ての引数を、ダブルクォーテーション「”」で囲む必要があります。
- 第3引数の「条件」は省略可能です。省略した場合は、第2引数で指定したテーブルまたはクエリ全体を、集計対象にします。
条件の記述方法はちょっと複雑で、冒頭に挙げたような注意点がありますので、1つずつ説明していきます。
定義域集合関数の「条件」の記述方法
以下のテーブルを例に、説明いたします。
DCount関数を例に説明しますが、全ての定義域集合関数に共通の注意事項です。
なお、定義域集合関数はVBAで使うことが多いので、以下の例は全てVBAでの使用例です。
クエリでも定義域集合関数を使えますが、クエリの集計機能でほとんど代用できるので、あまり使う機会は無いと思います。

条件全体をダブルクォーテーション「”」で囲む
全ての引数に言えることですが、ダブルクォーテーション「”」で囲まないと、変数として見なされてしまい、「変数が定義されていません」というエラーが出てしまいます。
DCount("売上金額", "テーブル1", "売上金額<=20000")
➡結果として「2」が返されます。
文字列はシングルクォーテーション「’」で囲む
先ほどの「売上金額」は数値型フィールドでしたが、文字列のフィールドを検索する場合は、以下のように文字列をシングルクォーテーション「’」で囲む必要があります。
DCount("売上金額", "テーブル1", "営業所='大阪'")
➡結果として「4」が返されます。
これを “営業所=大阪” としてしまうと、「クエリ パラメータとして指定した式でエラー ‘大阪’ が発生しました」という、意味不明なエラーが出てしまいます。
日付・時刻はシャープ「#」で囲む
今度は、日付/時刻型フィールドの検索です。
日付・時刻を検索する場合は、以下のように検索値をシャープ「#」で囲む必要があります。
DCount("売上金額", "テーブル1", "入社日=#2010/4/1#")
➡結果として「3」が返されます。
これを ”入社日=’2010/4/1’“ のようにシングルクォーテーション「’」で囲んでしまうと、「抽出条件でデータ型が一致しません」というエラーが出てしまいます。
また、”入社日=2010/4/1″ のように何も付けないと、条件検索が出来ずに「該当データ無し」と見なされます。そのため、Dcount関数では「0」が返され、DLookupやDSum関数などでは、「Null」が返されます。
変数はダブルクォーテーション「”」の外に出して「&」でつなげる
最後に、変数を使う例です。
慣れないと分かりにくいですが、フォームからの入力値で検索する場合など、VBAでよく使います。
数値型の場合
Dim SrcStr As String
SrcStr = 20000
MsgBox DCount("売上金額", "テーブル1", "売上金額<=" & SrcStr)
先ほどの “売上金額<=20000“ の20000 の部分をダブルクォーテーション「”」の外に出して、変数SrcStrに置き換えて「&」でつなげます。
文字列型のフィールド場合
Dim SrcStr As String
SrcStr = "大阪"
MsgBox DCount("売上金額", "テーブル1", "営業所='" & SrcStr & "'")
今度は、知らないとかなり混乱すると思いますので、順を追って説明いたします。
- 先ほどの “営業所=‘大阪‘“ の大阪 から後ろをダブルクォーテーション「“」の外に出して、大阪 を変数SrcStrに置き換える
- 変数SrcStrの前後にシングルクォーテーション「’」が必要なので、SrcStrの前後を「&」でつなげる
- シングルクォーテーション「’」は単独で扱えないので、ダブルクォーテーション「”」で囲む
これで、“営業所=‘“ & SrcStr & “‘“ という条件文の出来上がりです。
日付/時刻型のフィールド場合
先ほどの文字列型のシングルクォーテーション「’」を、そのままシャープ「#」に読み替えて下さい。
Dim SrcStr As String
SrcStr = "2010/4/1"
MsgBox DCount("売上金額", "テーブル1", "入社日=#" & SrcStr & "#")
コメント