• ベストアンサー

アクセス DCountの返り値が必ず0になる

DCountの返り値が必ず0になってしまうのです。 該当のフィールドには値は入っています。 しかし Sub test() Dim ColName As String ColName = "あああ" Debug.Print DCount("[" & ColName & "]", "test", "[" & ColName & "] = '" & ColName & "'") End Sub をすると、どんなに値がはいっていても0になってしまいます。 フィールドの型はテキスト型です。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> DCount("[" & ColName & "]", "test", "[" & ColName & "] = '" & ColName & "'") これは何を得たいのでしょう。 ColName = "あああ" なら DCount("[あああ]", "test", "[あああ] = 'あああ'") になると思いますが、添付された図内に [あああ] = 'あああ' は無いですね。 単に DCount("[あああ]", "test") であれば、図の見えている範囲では 5 が返ってくると思いますが・・・・

PVTETEJPB8
質問者

お礼

フィールド名も検索文字も変数に入れてましたね。ありがとうございました。

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

先日はねぎらいのお言葉を戴き、ありがとうございました。 http://okwave.jp/qa/q7900814.html さて、本題ですが・・・ テキスト型のフィールドを絞り込み条件としたDCount関数 では、確かに第3引数は「[フィールド名]='検索文字列'」に なることが多いですが、それ以外の形を使用する場面も あります。 今回提示されたコード上の式から私が推測する、「想定した 式」に近く、かつ「意図した(と思われる)結果」が得られるのは、 以下に示す式です。 但し、Accessでテキスト型のフィールドを作成したときに 既定の値となる「Null」は特殊な値で、「=」では同じ値か どうかの判定ができません。 (イミディエイトウィンドウで「?Null=Null」の結果を確認する  と、「True」ではなく「Null」が返ります) PVTETEJPB8さんが、この点をどう想定していたかによって 「意図した結果」も変わるため、以下のように、結果が 異なる2通りの式が考えられます: a) Debug.Print DCount("[" & ColName & "]", "test", "[" & ColName & "]=[" & ColName & "]") b) Debug.Print DCount("[" & ColName & "]", "test", "Nz([" & ColName & "])=Nz([" & ColName & "])") 上記の2つの式のうち、  a)の場合は『あああ』の値が「Null」以外のものの全件数が、  b)の場合は『あああ』の値に関係なく、テーブルの全件数が、 それぞれ返されます。 (第2引数を省略したNz関数では、対象がテキスト型なら  空文字("")、数値型の場合は「0」に変換されます。  Nullと違い、「""=""」の比較結果は、通常の文字列と  同様に「True」となるため、テーブルの全件数がカウント  される結果となります) 但し、上記の結果を得たい場合、通常はそれぞれ以下のように 「第3引数を省略した式」を使用します: a) Debug.Print DCount("[" & ColName & "]", "test")  または b) Debug.Print DCount("*", "test") http://office.microsoft.com/ja-jp/access-help/HA001228817.aspx (ページ中ほどの「+ヒント」(青文字の折り畳み)以降を特に参照) ・・・以上、長くなりましたが、参考まで。

PVTETEJPB8
質問者

お礼

ご回答ありがとうございます。

関連するQ&A