Access (VBA)

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

 
(Windows 10 Pro : Access 2010)
円グラフの凡例について
投稿日時: 18/12/21 16:16:37
投稿者: さー

いつもお世話になっております。
 
テーブルのデータを使って、レポートに円グラフを作成しました。
0件の場合凡例から消えてしまうのですが、凡例に表示する方法が
ありましたら、教えてください。
※凡例から消えてしまうと円グラフの色がずれてしまうので、
 色を固定したいです。
 
テーブル  (※日時列は日付/時刻型です。)
No.  日時    くだもの  
1  2018/10/1   りんご    
2  2018/10/15   みかん    
3  2018/11/1   ばなな    
4   2018/11/12   りんご    
5   2018/11/30   みかん   
 
レポート(1ヵ月単位で円グラフを書きたいです。)
11月を円グラフにした場合、
りんご:赤
ばなな:黄
みかん:オレンジ
の円グラフがかけます。(これは良いです)
 
しかし10月は、ばななが0件なので、
りんご:赤
みかん:黄 (←ここ)
のように凡例の色がずれてしまいます。
これをばななが0件でも
りんご:赤
ばなな:黄  (0件なのでグラフ上は見えませんが)
みかん:オレンジ (←ここ)
とする方法はありますでしょうか?
 
 
SQLビューは下記の通りです。
-------------------------------------------------------------------------------------
SELECT [データベース].くだもの, Count([データベース].くだもの) AS くだもののカウント, Format([日時],"yyyy\年mm\月") AS 月, Switch([くだもの]="りんご",1,[くだもの]="ばなな",2,[くだもの]="みかん",3) AS 式1
FROM データベース
GROUP BY [データベース].くだもの, Format([日時],"yyyy\年mm\月")
HAVING (((Format([日時],"yyyy\年mm\月"))=[Forms]![集計範囲]![年月]))
ORDER BY Switch([くだもの]="りんご",1,[くだもの]="ばなな",2,[くだもの]="みかん",3);
-------------------------------------------------------------------------------------
 
お手数をおかけいたしますが、よろしくお願い致します。

回答
投稿日時: 18/12/25 11:06:45
投稿者: Suzu

こんにちは。

引用:
HAVING (((Format([日時],"yyyy\年mm\月"))=[Forms]![集計範囲]![年月]))

この条件次第で、内容が変わってしまうのですよね。
 
であれば、どうにかして、年月に左右されず
 凡例 つまり 【くだもの】の値を固定させるかって事ですよね。
 
ってことは、
別に凡例表示用の 別テーブル
 
テーブル【凡例】
-----------------
くだもの ID
りんご 1
ばなな 2
みかん 3
 
を用意し
 
PARAMETERS [Forms]![集計範囲]![年月] TEXT;
SELECT
  [凡例].[くだもの],
  Count([データベース].[くだもの]) AS くだもののカウント,
  Format([データベース].[日時],"yyyy\年mm\月") AS 月,
  [凡例].[ID] AS 式1
FROM 凡例 LEFT JOIN [データベース] ON [凡例].[くだもの] = [データベース].[くだもの]
GROUP BY [凡例].くだもの, Format([日時],"yyyy\年mm\月")
HAVING (((Format([データベース].[日時],"yyyy\年mm\月"))=[Forms]![集計範囲]![年月]))
ORDER BY [凡例].[ID];
 
の様に外部テーブル「凡例」を基に表示項目を決定する様に変更しましょう。
(念の為パラメーター宣言を追加しています。)

投稿日時: 18/12/26 19:55:04
投稿者: さー

Suzu様
 
お世話になっております。回答していただきまして
ありがとうございました。
 
凡例をSwich関数で指定するのではなく、別テーブルと
連結して指定するという事で合っていますでしょうか?
 
やってみたのですが、Switch関数で凡例の順番を指定した
場合と同様で、0件の時には凡例から消えてしまいました。
(円グラフの塗りつぶし色がずれてしまいます。)
 
SQLビューは、エラーになってしまいましたので、若干変え
下記のようにしました。
 
SQLビュー
--------------------------------------------
SELECT [データベース].くだもの, Count([データベース].くだもの) AS くだもののカウント, Format([データベース].[日時],"yyyy\年mm\月") AS 月, 凡例.ID
FROM 凡例 LEFT JOIN データベース ON 凡例.[くだもの] = [データベース].[くだもの]
GROUP BY [データベース].くだもの, Format([データベース].[日時],"yyyy\年mm\月"), くだもの.ID
HAVING (((Format([データベース].[日時],"yyyy\年mm\月"))=[Forms]![集計範囲]![年月]))
ORDER BY 凡例.ID;
--------------------------------------------
 
もう少し考えてみます。
よろしくお願いいたします。
 

回答
投稿日時: 18/12/27 14:12:54
投稿者: Suzu

あーーごめんなさい。。
 
データベースに対し 年月にてグループ化・抽出を行い
その結果に対し、凡例テーブルを連結する必要があります。
 
データベースに対し 年月にてグループ化・抽出を行い
ここまでをサブクエリ tmp_Q にて実行しています。
 
 
PARAMETERS [Forms]![集計範囲]![年月] TEXT;
SELECT 凡例.くだもの, tmp_Q.くだもののカウント, tmp_Q.月
FROM 凡例 LEFT JOIN
(PARAMETERS [Forms]![集計範囲]![年月] TEXT;
 SELECT
  くだもの,
  Count(くだもの) AS くだもののカウント,
  Format(日時,"yyyy\年mm\月") AS 月
FROM データベース
GROUP BY くだもの, Format(日時,"yyyy\年mm\月")
HAVING ((Format(日時,"yyyy\年mm\月"))=[Forms]![集計範囲]![年月]);) AS tmp_Q
 ON 凡例.くだもの = tmp_Q.くだもの
ORDER BY [凡例].[ID];

投稿日時: 18/12/28 12:18:01
投稿者: さー

Suzu様
 
お世話になっております。早速のご回答ありがとうございます。
 

引用:
データベースに対し 年月にてグループ化・抽出を行い
その結果に対し、凡例テーブルを連結する必要があります。

なるほど。。結果に対して連結するのですね。
 
 
私事で大変恐縮ですが、年末年始はACCESSが入ったPCが使えない環境
のため、実際に行うのは来月の2週目以降になってしまいます。
早々に回答していただいたのに、申し訳ありません。
 
またできましたら、こちらの掲示板にてご連絡をいたします。
よろしくお願いいたします。
 

投稿日時: 19/01/07 20:00:33
投稿者: さー

Suzu様
 
お世話になっております。
先日は回答をいただきましてありがとうございました。
ご連絡が遅くなりまして、申し訳ございません。
 
本日、やってみましたところ、無事にできました!!
凡例が固定され、円グラフの色も思った通りに指定
できました。
 
大変助かりました。ありがとうございます。
また何かわからないこと等があった際は、こちらの
掲示板にてご相談させていただくと思いますので、
何卒よろしくお願いいたします。