今回はAccessVBAでDcount関数を使用したときに、
「実行時エラー ‘2471’: クエリ パラメーターとして指定した式でエラー ‘xxx’ が発生しました。」 とエラーコードがでてしまった場合の対処方法を紹介します。
DCount関数の使い方
対処方法を紹介する前に、簡単に使い方を紹介します。
DCount ( expr , domain [, criteria] )
・expr:必須。 レコード数をカウントするフィールド。「*」可
(テーブル内のフィールド、フォームのコントロール、定数、関数)
・domain:必須。テーブル名やクエリ名
・criteria:省略可能。 DCount関数が実行されるデータの範囲を制限するために使用される文字列式。
Dcount関数は、
テーブル等(domain)のフィールド(expr)で値があるレコード、かつ条件(criteria)に合致するレコード数を取得します。
例えば、以下の「社員情報」テーブルで「氏名」フィールドをカウントし、
11000以上の社員NOを取得するときは、このように指定します。
・社員情報
社員NO | 氏名 |
---|---|
10001 | 山田 |
15000 | 今村 |
花輪 | |
14720 | |
93745 | 船井 |
・コード
Sub DCount_OK()
Dim Tmp As Long
Tmp = DCount("氏名", "社員情報", "社員NO > 11000")
Debug.Print Tmp
End Sub
結果は「2」です。
ここで、例では各要素がダブルコーテーション(”)でくくられていることがわかると思いますが、
Dcount関数を記述する際に一癖あるのが、各要素が文字列であることです。
エラーの原因は?どんな状況で発生する?
私の場合、変数を使って条件を可変にしようとした際にエラーがでました。
前述のDcount関数の使い方にも記述しましたが、
Dcount関数は各要素に文字列を入れる必要があります。
そこで、条件の文字列の中に変数名を入れてしまうと、
「’変数名’という値と比較できないよ!」とエラーが出てしまいます。
なんとなく、「”A > 999″」という書き方ができるため、変数でもいけるのでは?と思ったのが間違いでした。
・コード(誤った例)
Sub DCount_Err()
Dim Tmp As Long
Dim TestErr As Long
TestErr = 11000
Tmp = DCount("氏名", "社員情報", "社員NO > TestErr")
Debug.Print Tmp
End Sub
・エラーメッセージ
対処方法
対処方法ですが、
以下のように変数部分を文字列と「&」で結合させると正しく出力されます。
Sub DCount_Err()
Dim Tmp As Long
Dim TestErr As Long
TestErr = 11000
Tmp = DCount("氏名", "社員情報", "社員NO > " & TestErr)
Debug.Print Tmp
End Sub
これで、繰り返し処理などで可変の値が入っても対応することができます。