• ベストアンサー

アクセスフォームからのカウント

下記画像のクエリをもとに集計フォームを作成しました。 そちらのフォームで数字1が入力されている数のカウント、数字2が入力されている数のカウント、数字1、数字2の入っている合計の数をカウントという3つの数字が欲しいのですが、フォームヘッダーにテキストボックスをつくり、コントロールソースに =Count([数字1])  =Count([数字2])等といれますと空欄の欄も数えてくれどちらか一つの情報が入っている全件の数字が出てきます。 どのようにしたら数字1が入力されている数のカウント、数字2が入力されている数のカウント、数字1、数字2の入っている数をカウントという3つの数字がでてきますか?

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

  • ベストアンサー
回答No.6

Q、空欄があっても答えがでる方法はありますか? A、先の添付図の[数字2]には空欄があると思いますが・・・ ということは、質問者の場合は《実際は空欄ではなくて""を表示していることが考えられます。 【イミディエイト】 ? Null > 0 Null ? "">0 エラー イミディエイトウインドウで上記のような論理式を入力すると《"">0》はエラーになります。完全な空欄=Null であればエラーは発生しません。そういうことで、《"">0》という論理式のエラー対策が必要だったということです。 さて、そうなると値が《""》でも《null》でもOKな論旨式を書かなければなりません。ですから、 1、そもそもテーブルの列にnull値を発生させない。 2、そもそも《""》ではなくて《0》に置換する。 3、その際に《0》を表示したくなければ書式を工夫する。 4、1、2,3をしなければNz()で対応する。   あるいは =Abs(Sum("Len(数字2 & "")>0")) という手段もあります。

mirumirus
質問者

お礼

ありがとうございました! Nzの数式でなんで私のデータだけ空欄があるとエラーが出るのかわからなかったのですが””が入っていたのですね。 親切に教えていただきありがとうございました! 希望通りのものができました!ありがとうございました。

その他の回答 (5)

回答No.5

【確認】エラーについて 添付図を参照されたし。エラーなく目的を達成しています。ということは、詳細部のフィールド名と式に書いているそれが一致していれば問題ないと推察しますが・・・。

mirumirus
質問者

お礼

何度もありがとうございます。再度質問させて下さい。空欄の欄に0を入力したところ =Abs(Sum("Nz(数字2)>0"))の式で希望通りの数字がでました。 空欄の欄があっても答えがでる方法はありますか?

回答No.4

【蛇足の補足】「それぞれ」について 論理式にNz()を書くのかどうか? 1、書いても書かなくても結果は同じなので書かない。 2、でも、そういう判断が面倒なので取り合えず書いておく。 1,2の選択は、それぞれの判断。ということです。

回答No.3

【蛇足】=Abs(Sum("Nz(数字2)>0")) とNull対策が必要かどうかはそれぞれです。

mirumirus
質問者

お礼

何度もご連絡を本当にありがとうございます。感謝致します。 こちらでもためさせていただいているのですが・・。やはりエラーになります。

回答No.2

【補足】Sum()も利用できます。 =Abs(Sum("数字2>0")) 数字2>0 の値は、0 or -1。ABS()で絶対値を表示しても目的は達成できます。

mirumirus
質問者

お礼

再度の式のご教示ありがとうございます。 残念ながらこちらで試させていただいてもエラーになります。 ページヘッター、フッター、詳細のどちらでもテキストボックスを作りコントロールソースに教えていただきました式を入力してるのですがすべてエラーとでてきます。

回答No.1

【イミディエイト】 ? DBLookup("SELECT Count(*) FROM テーブル1 WHERE 数字1>0",0) 3 ? DBLookup("SELECT Count(*) FROM テーブル1") 4 イミディエイトウインドウでのテスト結果を参照すると、 SELECT Count(*) FROM XXXXX の戻り値は、3の場合もあるし4もあることが判ります。その違いは WHERE節を指定しているかどうかです。 >Count 関数は単にレコード数を計算するのみです。 >レコードにどのような値が格納されているかは関係ありません。 (microsoft) 質問者は、条件節を指定できない Count 関数を利用しているので《値に関係なくレコード数》を取得し表示していますので、結果は当然に4。 >SELECT Count(*) FROM テーブル1 WHERE 数字1>0 このWHERE節ありのSQL文の実行結果を戻す方法は3つ。 1、=DLookup("Count(*)","テーブル1", "数字1>0") 2、=DCount("*","テーブル1","数字2>0") 3、DBLookup("SELECT Count(*) FROM テーブル1 WHERE 数字1>0",0) なお、DBLookup()は、私が自作したものでAccessには用意されていません。ですから、通常は1、2のどちらか。普通は2だと思います。

mirumirus
質問者

お礼

f_a_007 様丁寧に教えていただきありがとうございます。 お返事遅れませて申し訳ありません。 1.2両方で試させていただいたのですがエラーになります。

関連するQ&A