PR

【Access】DLookup関数やDCount関数の条件の記述方法

Access
記事内に広告が含まれています。

Accessでは、「定義域集合関数」といって、条件に該当するデータの検索や集計ができる関数があります。
例えば、タイトルに掲げたDLookup関数(値の検索)やDCount関数(件数のカウント)などです。
これらの関数では、抽出条件を記述するのに以下の注意点があります。
知らないとハマりますので、具体例を挙げて説明いたします。

  • 条件全体をダブルクォーテーション「”」で囲む
  • 文字列はシングルクォーテーション「’」で囲む
  • 日付・時刻はシャープ「#」で囲む
  • 変数はダブルクォーテーション「”」の外に出して「&」でつなげる
Accessを書籍でコツコツ学習したい方はこちら

定義域集合関数とは

定義域集合関数には以下のような種類があり、条件に該当するデータの集計や検索が出来ます。

関数名用途
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 & "'")

今度は、知らないとかなり混乱すると思いますので、順を追って説明いたします。

  1. 先ほどの 営業所=大阪 の大阪 から後ろをダブルクォーテーション「の外に出して、大阪 を変数SrcStrに置き換える
  2. 変数SrcStr前後シングルクォーテーション「’」が必要なので、SrcStrの前後を「&」でつなげる
  3. シングルクォーテーション「’」は単独で扱えないので、ダブルクォーテーション「”」で囲む

これで、営業所= & SrcStr &  という条件文の出来上がりです。

日付/時刻型のフィールド場合

先ほどの文字列型のシングルクォーテーション「’」を、そのままシャープ「#」に読み替えて下さい。

Dim SrcStr As String

SrcStr = "2010/4/1"
MsgBox DCount("売上金額", "テーブル1", "入社日=#" & SrcStr & "#")
Accessを書籍でコツコツ学習したい方はこちら

コメント

タイトルとURLをコピーしました