Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2010)
複数条件に合う件数のカウント
投稿日時: 18/11/05 19:49:14
投稿者: さー

お世話になります。
以前、こちらの掲示板で質問させていただいたのですが、
どうしても分からず、追加で再度質問させてください。
 
テーブル 名:データベース
日時列:日付/時刻型
No. 日にち  分類  
1 2013/4/1 りんご
2 2013/4/9  みかん
3 2013/5/2  りんご
 ・・・・
2000 2018/9/9 バナナ
 
テーブルに登録したデータベースから
分類 :りんご
日にち:「集計範囲」というフォームにある、月:Format([日時],"yyyy\年mm\月")
    というコンボボックスで選択した1ヶ月間
上記2つの条件に一致する(りんごかつ集計範囲のコンボボックスで選択した1ヶ月間)件数を
レポートに表示する方法を教えてください。
 
以前教えていただいたSQLビューは下記です。

引用:
( SQL ビュー)
---------------------------------------------------
SELECT [テーブル名].[分類],
        Min([テーブル名].[日にち]) AS [日にちの最小],
        Max([テーブル名].[日にち]) AS [日にちの最大],
        Count(*) AS レコード件数
FROM [テーブル名]
WHERE ([テーブル名].[日にち] Between #2018/08/01# And #2018/08/31#)
   AND ([テーブル名].[分類]="りんご")
GROUP BY [テーブル名].[分類];
---------------------------------------------------
(テーブル名は適宜修正すること)

 
質問1
そもそもSQLビューを入力する画面を見つけることができないのですが、どのように
表示すればよいのでしょうか?
式ビルダーとは異なるのでしょうか?
 
質問2
以前は、日にち:2018年8月1日〜2018年8月31日としたのですが、ここをフォームの
コンボボックスで指定した1ヶ月間(月:Format([日時],"yyyy\年mm\月"))とする
にはどのようにしたらよいのでしょうか?
 
お手数をおかけいたしますが、よろしくお願いいたします。
 
 

回答
投稿日時: 18/11/06 09:31:15
投稿者: sk

引用:
テーブルに登録したデータベースから
分類 :りんご
日にち:「集計範囲」というフォームにある、月:Format([日時],"yyyy\年mm\月")
    というコンボボックスで選択した1ヶ月間
上記2つの条件に一致する(りんごかつ集計範囲のコンボボックスで選択した1ヶ月間)件数を
レポートに表示する方法を教えてください。

ここで表示なさろうとしている件数は、レポートの
レコードソースであるテーブル/クエリのレコードの件数や、
レポート上における任意のグループごとのレコードの件数とは
別なのでしょうか。
 
また、その件数をレポートのどこに(どのセクションに
表示なさろうとしているのでしょうか。
 
引用:
質問1
そもそもSQLビューを入力する画面を見つけることができないのですが、
どのように表示すればよいのでしょうか?

・クエリオブジェクトのクエリビルダー。
 
・フォーム/レポートの[レコードソース]プロパティを
 編集する際に表示されるクエリビルダー。
 
・コンボボックス/リストボックスの[値集合ソース]プロパティを
 編集する際に表示されるクエリビルダー。
 
のどれについておっしゃっているのでしょうか。
 
引用:
質問2
以前は、日にち:2018年8月1日〜2018年8月31日としたのですが、
ここをフォームのコンボボックスで指定した1ヶ月間
(月:Format([日時],"yyyy\年mm\月"))とするには
どのようにしたらよいのでしょうか?

基本的には以下の記事での回答内容を
応用なさればよいでしょう。
 
Access VBA 掲示板 より:
https://www.moug.net/faq/viewtopic.php?t=77459
 
引用:
直近13ヶ月を表す抽出条件

引用:
PARAMETERS [Forms]![集計範囲]![年月] DateTime;
TRANSFORM Count([データベース].[分類]) AS 分類のカウント
SELECT Format([データベース].[日時],"yyyy\年mm\月") AS 年月
FROM [データベース]
WHERE [データベース].[日時] Between DateSerial(Year([Forms]![集計範囲]![年月]),
                                               Month([Forms]![集計範囲]![年月])-12,
                                               1)
                                And DateSerial(Year([Forms]![集計範囲]![年月]),
                                               Month([Forms]![集計範囲]![年月])+1,
                                               0)
GROUP BY Format([データベース].[日時],"yyyy\年mm\月")
PIVOT [データベース].[分類];

12 を引かなければ DateSerial 関数の戻り値は
コンボボックス[年月]で指定された年月の 1 日となります。

投稿日時: 18/11/06 21:38:42
投稿者: さー

sk様
 
いつも大変お世話になっております。ご回答いただき、
ありがとうございます。
 

引用:
ここで表示なさろうとしている件数は、レポートの
 レコードソースであるテーブル/クエリのレコードの件数や、
レポート上における任意のグループごとのレコードの件数とは
別なのでしょうか。

テーブルのレコードの件数を表示したいです。
 
引用:
また、その件数をレポートのどこに(どのセクションに)
 表示なさろうとしているのでしょうか

レポートにテキストボックスを用意して、そこの式ビルダーに
式を入力して、表示をしようと思っています。
今回の複数条件にあう件数や、以前ご相談させていただいた積上げ
棒グラフなどを1つのレポート上に表示して、テーブルのデータを
1ヶ月ごとに集計したまとめレポートを作成するイメージになります。
 
お手数をおかけして申し訳ございません。よろしくお願いいたし
ます。
 

回答
投稿日時: 18/11/07 10:01:34
投稿者: sk

引用:
テーブルのレコードの件数を表示したいです。

引用:
レポートにテキストボックスを用意して、そこの式ビルダーに
式を入力して、表示をしようと思っています。

レポートに出力されるレコードの件数を表示させる場合は、
例えば次のような式を[コントロールソース]プロパティに
設定した演算テキストボックスを、レポートフッターセクション上に
配置なさればよろしいでしょう。
 
-------------------------------------------------------
 
=Count(*)
 
-------------------------------------------------------
 
引用:
今回の複数条件にあう件数や、以前ご相談させていただいた積上げ
棒グラフなどを1つのレポート上に表示して、テーブルのデータを
1ヶ月ごとに集計したまとめレポートを作成するイメージになります。

あとは、そのレポートのレコードソースが
どのようなテーブル/クエリであるかの問題でしょう。

投稿日時: 18/11/07 19:44:44
投稿者: さー

sk様
 
いつも大変お世話になっております。
ご回答をいただきましてありがとうございます。
 

引用:
=Count(*)

複数の条件を設定したいので、DCount関数を使用したのですが、
思ったとおり結果になりませんでした。
=DCount("*","データベース","[分類]='りんご'" And [日時] Between DateSerial(Year([Forms]![集計範囲]![年月]),Month([Forms]![集計範囲]![年月],1) And [日時] Between DateSerial(Year([Forms]![集計範囲]![年月]),Month([Forms]![集計範囲]![年月]+1,0)
 
データベース(テーブル)から
分類:りんご
日時:フォームで選択した1ヶ月間
としたいのですが、テーブルの全部のレコード数が表示されてしまいます。
 
1つの条件(りんごに該当する列の件数)は下記の式でできました。
=DCount("*","データベース","[分類]='りんご'")
Andでつなげれば、複数条件の設定ができると思うのですが、うまくいかないのです。
 
式の中でおかしいところなどありましたら、教えていただけると助かります。
お手数をおかけいたしますが、よろしくお願いいたします。
 
 
 

回答
投稿日時: 18/11/08 09:45:02
投稿者: sk

引用:
=DCount("*","データベース","[分類]='りんご'" And [日時] Between DateSerial(Year([Forms]![集計範囲]![年月]),Month([Forms]![集計範囲]![年月],1) And [日時] Between DateSerial(Year([Forms]![集計範囲]![年月]),Month([Forms]![集計範囲]![年月]+1,0)

=DCount("*","データベース","[分類]='りんご' And ([日時] Between DateSerial(Year([Forms]![集計範囲]![年月]),Month([Forms]![集計範囲]![年月]),1) And DateSerial(Year([Forms]![集計範囲]![年月]),Month([Forms]![集計範囲]![年月])+1,0))")
 
--------------------------------------------------------------------
 
正しくはこう。

投稿日時: 18/11/08 21:53:11
投稿者: さー

sk様
 
いつも大変お世話になっております。
 
できました!
カッコと"の位置が異なっていたのですね。
 
DateSerial関数部分が違うのだろうか、そもそもDcount関数では
いけないのだろうかなどと考えていたのですが、全然違いました。
 
ありがとうございました。