PR

【Access】Dcount「クエリ パラメーターとして指定した式でエラー ‘xxx’ が発生しました。」対処方法

Access
この記事にはアフィリエイト広告および広告が含まれています。

今回はAccessVBAでDcount関数を使用したときに、
「実行時エラー ‘2471’: クエリ パラメーターとして指定した式でエラー ‘xxx’ が発生しました。 とエラーコードがでてしまった場合の対処方法を紹介します。

DCount関数の使い方

対処方法を紹介する前に、簡単に使い方を紹介します。

DCount ( expr , domain [, criteria] )

・expr:必須。 レコード数をカウントするフィールド。「*」可
    (テーブル内のフィールド、フォームのコントロール、定数、関数)
・domain:必須。テーブル名やクエリ名
・criteria:省略可能。 DCount関数が実行されるデータの範囲を制限するために使用される文字列式。

(Microsoft Doc: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

これで、繰り返し処理などで可変の値が入っても対応することができます。

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