質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

2030閲覧

Access 時系列グラフ作成方法

saksak_planner

総合スコア6

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2021/04/08 00:24

編集2021/04/08 16:36

お世話になります。

Access2013で業務管理システムを作成しています。

以下のレコードを基に、月別に進捗をグラフ化しようとしています。

【案件テーブル】
受付日    管理番号  タスク1  タスク2  タスク3  ...
2021/1/12  A01    2021/1/30  2021/2/10 2021/3/1
2021/2/10  B01 2021/2/15 2021/3/8
2021/2/25  C01    2021/3/14
.
.
.
約2000件 

上記の場合、

1月末時点は、タスク1が1で総数1
2月末時点は、タスク1が1、タスク2が1、未着手が1で総数3
3月末時点は、タスク1が1、タスク2が1、タスク3が1で総数3

を積み上げ棒グラフで表現することにより、増加数とタスク進捗の
推移が見られます。

現時点の構成をAccessのグラフ機能で実現するには、月毎の月末時点の受付総数×タスクを
ワークテーブルに作成する(VBA)しか方法がないように思っておりますが、
テーブル構成を変えることにより、データソースとなるクエリを作成することは
可能でしょうか?

年間のレコード増加件数は200程です。

よろしくお願い致します。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

質問が的を得ていなかったため、新たに質問を立てさせていただき
無事解決いたしました。

投稿2021/04/28 11:01

saksak_planner

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

(受付日,管理番号,タスクNO,着手日)のような正規化されているテーブルであれば、現状の案件テーブルの結果も総数もクロス集計クエリーで求める事は出来ます。

求める結果を算出する為のワークテーブルを作成するのは、正規化されたテーブルを作るという事になりますのである意味本末転倒ですね。

それはさておき、手段としてワークテーブルを作成するのも方法ですが、受付総数を求めるユーザー定義関数を作成するという方法もあります。

VBA

1Public Function pf受付総数(タスク1, タスク2, タスク3, ・・・) 2 Dim w受付総数 As Integer 3 w受付総数 = 0 4 If Not IsNull(タスク1) Then w受付総数 = w受付総数 + 1 5 If Not IsNull(タスク2) Then w受付総数 = w受付総数 + 1 6 If Not IsNull(タスク3) Then w受付総数 = w受付総数 + 1 78910 pf受付総数 = w受付総数 11End Function

上記関数をクエリーで指定します。

SQL

1select * , pf受付総数(タスク1, タスク2, タスク3, ・・・) as 受付総数 2from 案件テーブル

投稿2021/04/08 01:04

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saksak_planner

2021/04/08 10:44

sazi様 アドバイスありがとうございます。 本日は在宅のため、実行環境がなくコード試せていませんが ユーザー定義関数を使用したクエリを作成してみます。 後日結果をご報告させてください。 正規化でも考えてみたのですが、私が作成したいX月末日時点の時系列グラフには 以下のような問題が出てしまいます。 受付日    管理番号  タスクNO  着手日 2021/1/12  A01    未着手   Null 2021/1/12  A01    タスク1  2021/2/15   2021/1/12  A01    タスク2  2021/3/8 2021/1/12  A01    タスク3  2021/4/21 例えば、上記のように毎月タスクが進んでいれば問題なくカウントされますが (月間でタスクが2以上ある場合は最新を抽出する) 受付日    管理番号  タスクNO  着手日 2021/1/12  A01    未着手   Null 2021/1/12  A01    タスク1  2021/2/15   2021/1/12  A01    タスク2  2021/4/21 このように3月はなにも動きがなかった場合、3月もタスク1としてカウントしなければ 正しい総数が取れません。(3月だけA01が存在しないことになる) その問題点を踏まえると、正規化したテーブルだけでは情報が足らず どちらにしても以下のようなワークテーブルが必要になってしまうかと…泣 カウント月 管理番号  タスクNO 2021年1月 A01    未着手 2021年1月 A01    タスク1   2021年2月 A01    タスク1 2021年3月 A01    タスク2 まずは、ユーザー定義関数試してみます!
saksak_planner

2021/04/08 10:45

失礼しました。ワークテーブルは以下が正しいです。 カウント月 管理番号  タスクNO 2021年1月 A01    未着手 2021年2月 A01    タスク1   2021年3月 A01    タスク1 2021年4月 A01    タスク2
sazi

2021/04/08 12:10 編集

求めたいものがいまいち理解できていませんが、データの持たせ方としては発生したものだけを記録するものと考えて下さい。 例えば、未着手なら着手した物が無い状態で判断するようにします。 受付した事実は記録しないと駄目だというなら、それぞれは独立したエンティティなので、テーブルは別になるのが正しい持ち方です。
saksak_planner

2021/04/08 16:42

説明が不十分で申し訳ありません。 エクセルのピボットグラフで作成したイメージを追加しましたので ご確認をお願いします。 月の分母はその月時点での案件総数となり、内訳が分かるようにしたいのです。 このグラフのデータソースのように、Accessのレコード数も月度×総数分必要であると 考えており、前途のように動きがない場合のレコードが存在しないために正しくグラフ化できないのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問