Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


813 / 2272 ツリー ←次へ | 前へ→

【9980】グループ化したものを集計したい あおぎん 07/11/15(木) 12:28 質問[未読]
【9981】Re:グループ化したものを集計したい Gin_II 07/11/15(木) 13:31 回答[未読]
【9984】Re:グループ化したものを集計したい あおぎん 07/11/16(金) 9:54 質問[未読]
【9985】Re:グループ化したものを集計したい Gin_II 07/11/16(金) 10:34 回答[未読]
【9986】Re:グループ化したものを集計したい あおぎん 07/11/16(金) 12:16 お礼[未読]

【9980】グループ化したものを集計したい
質問  あおぎん  - 07/11/15(木) 12:28 -

引用なし
パスワード
   いつもお世話になっています。

社員の健康診断を外部に委託しており、その結果が下記のようなデータで届くのですが

T_結果
所属コード社員コード 氏名 性別  年代 コース BMI判定 肝機能 ・・・    
1      1     あ   男   40  B   肥満   要精密検査  
1      2     い   女   30  B   標準   異常なし  
2      3     う   男   30  A   やせぎみ 


※判定項目は、以下 脂質、糖代謝、胃など15項目ほど。
※BMI判定以外は 異常なし、観察、要経過観察、要精密検査、要治療、治療中、要再検査 のどれかが判定として入っています。(空欄もあり)

これを 下記のように、判定ごとの人数で集計する必要があります。

          肝機能  脂質  糖代謝  胃 ・・・
受診者数(合計)   583   579   691   41 
 異常なし      470   147   611   40
 観察         0   219     6   0
 要経過観察      33   152    35   0
 要精密検査      70    14    14   1
 要治療        0    27    0   0
 治療中        10    20    13   0
 要再検査       0    0    12   0
 
ひとつの種目の集計(肝機能だけ・・とか)ならクロス集計でできるのですが、複数の種目を集計する方法がよくわからなかったので、このテーブルをもとにしたQ_結果でレポートを作成し、レポートフッターにテキストボックスを配置し

異常なし: =DCount("[氏名]","[Q_結果]","[肝機能]='異常なし'")
観察  : =DCount("[氏名]","[Q_結果]","[肝機能]='観察'")



などとして、データ元から、それぞれの数をカウントし表示する方法をとっています。

で、最終的には、コースごとや年代ごとの集計も必要なので、それぞれグループ化して、グループフッターに同じようなテキストを配置したのですが、当たり前なのでしょうけど、全体の数がカウントされます。
そこで、
=DCount("[氏名]","[Q_結果]","[肝機能]='異常なしand [コース]=report!R_結果!コース")
と条件を加えたり、
グループフッターのフォーマット時イベントにコードを記述すればいいのかなと思い、
Me.テキスト肝機能_異常なし = DCount("[氏名]","[Q_結果]","[肝機能]='異常なしand [コース]=report!R_結果!コース")
などと記述したりしましたが、エラーが出ます。

レポートでグループごとに、数値をカウントする方法があるでしょうか?
もしくは他にこういった集計をするのにいい方法がありましたらご教示をお願いします。

現在は 別にフォームを作って、複数のコンボボックスでコースや年代を入力しデータ抽出したクエリをもとにして、レポートを表示させるという方法でやっていますが、できれば、ひとめで、個別の件数と全体の件数が見れるものが欲しいと思っています。
どうぞよろしくお願いします。

(win2000 Access2000)

【9981】Re:グループ化したものを集計したい
回答  Gin_II  - 07/11/15(木) 13:31 -

引用なし
パスワード
   > T_結果
> 所属コード社員コード 氏名 性別  年代 コース BMI判定 肝機能 ・・・    
> 1      1     あ   男   40  B   肥満   要精密検査  
> 1      2     い   女   30  B   標準   異常なし  
> 2      3     う   男   30  A   やせぎみ 
> ・
> ・

SELECT 所属コード, 社員コード, "BMI判定" AS 種別, BMI判定 AS 判定 FROM T_結果
UNION ALL
SELECT 所属コード, 社員コード, "肝機能", 肝機能 FROM T_結果
UNION ALL
    :

のようなクエリを作れば、それを基にクロス集計クエリが使えると思います。

【9984】Re:グループ化したものを集計したい
質問  あおぎん  - 07/11/16(金) 9:54 -

引用なし
パスワード
   ▼Gin_II さん:

ご提示の方法でやってみたらできそうです。
ありがとうございました!


それと・・最初の投稿に関連して質問があるのですが・・。

DCountで、空欄の数を数えるのはどうしたらよいでしょうか?
=DCount("[氏名]","[Q_結果]","[肝機能]=null")
としてもエラーが出ます。
何か方法がありますでしょうか??

【9985】Re:グループ化したものを集計したい
回答  Gin_II  - 07/11/16(金) 10:34 -

引用なし
パスワード
   >DCountで、空欄の数を数えるのはどうしたらよいでしょうか?
>=DCount("[氏名]","[Q_結果]","[肝機能]=null")
>としてもエラーが出ます。

空欄 = Null
ということであれば、

"[フィールド名] Is Null"
"IsNull([フィールド名])"

のどちらかで試してみてください。

空文字も含めて判定したいのであれば、

"Nz([フィールド名],'') = ''"

とか、

"Len(Nz([フィールド名],'')) = 0"

などで、どうでしょうか?

【9986】Re:グループ化したものを集計したい
お礼  あおぎん  - 07/11/16(金) 12:16 -

引用なし
パスワード
   ▼Gin_II さん:

ご提示の方法すべて試しました。
できました!
ありがとうございました。


>
>空欄 = Null
>ということであれば、
>
>"[フィールド名] Is Null"
>"IsNull([フィールド名])"
>
>のどちらかで試してみてください。
>
>空文字も含めて判定したいのであれば、
>
>"Nz([フィールド名],'') = ''"
>
>とか、
>
>"Len(Nz([フィールド名],'')) = 0"
>
>などで、どうでしょうか?

813 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free