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

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

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

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

1回答

583閲覧

ACCESSクエリでの表示テーブルの指定

ryosuke2001

総合スコア4

Access

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2019/08/20 04:26

編集2019/08/20 04:29

前提・実現したいこと

お世話になっております。

現在、Access2019で以下のような「インポートテーブル」があります。
画像に入りきっていませんが、フィールド名は「品名」、「1月の合計」~「12月の合計」と繋がっています。

イメージ説明

こちらのテーブルをクエリで見た目を変更する際に、
対象月を指定して指定月だけを表示することは可能でしょうか。
フォームの入力等で自動で更新されるようにしたいと考えています。

EXCELであればINDEXを経由して列をしていすることは可能ですが、
ACCESSでこの完成イメージを実現するにはどのようにすればよいでしょうか?

イメージ説明

ご教授いただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

そのインポートテーブルがデータベースとして正規化されていないものですので、まずは正規形のテーブルに変換する必要があります。
非正規形ではデータベースとして使い物になりません。

具体的には正規形は下記のような形になります。

品名合計
1190
2195

実際は、品名は、品名マスターに分割したりとか、主キーの設定とかやらなければならないことがまだいろいろありますが、それはおいおい学習してもらうとして(説明しだすと長くなので)、とりあえず上記の形に変換します。

変換する方法としては、いろいろありますが、ユニオンクエリを使う方法を紹介しておきます。
下記のようなユニオンクエリを作成して、それをテーブル作成クエリにして実行すれば上記の正規形のテーブルができます。

sql

1SELECT 品名, 1 AS, [1月の合計] AS 合計 FROM インポートテーブル 2UNION All 3SELECT 品名, 2 AS, [2月の合計] AS 合計 FROM インポートテーブル 4UNION All 5SELECT 品名, 3 AS, [3月の合計] AS 合計 FROM インポートテーブル 6UNION All 7SELECT 品名, 4 AS, [4月の合計] AS 合計 FROM インポートテーブル 8UNION All 9SELECT 品名, 5 AS, [5月の合計] AS 合計 FROM インポートテーブル 10UNION All 11SELECT 品名, 6 AS, [6月の合計] AS 合計 FROM インポートテーブル 12UNION All 13SELECT 品名, 7 AS, [7月の合計] AS 合計 FROM インポートテーブル 14UNION All 15SELECT 品名, 8 AS, [8月の合計] AS 合計 FROM インポートテーブル 16UNION All 17SELECT 品名, 9 AS, [9月の合計] AS 合計 FROM インポートテーブル 18UNION All 19SELECT 品名, 10 AS, [10月の合計] AS 合計 FROM インポートテーブル 20UNION All 21SELECT 品名, 11 AS, [11月の合計] AS 合計 FROM インポートテーブル 22UNION All 23SELECT 品名, 12 AS, [12月の合計] AS 合計 FROM インポートテーブル;

正規形のテーブルの名前を「月別合計」とします。下記のようなパラメータテーブルクエリを作成します。

vba

1SELECT 品名,, 合計 FROM 月別合計 WHERE 月=Forms!フォーム1!月;

「フォーム1」を作成してテキストボックス「月」を配置します。
そこの「月」に1~12の任意の数値を入力してこのクエリを開くと指定した月のデータが抽出されて表示されます。

これで質問内容の回答にはなっていますが、データベースは基本を理解せずに設定していくと、あとで使い物にならないものになりますので、遠回りでも基本を学習してから本格的な設計に入ることをお勧めします。

入門書を購入して学習するか、WEB上の入門サイトで学習するといいでしょう。最近の私のお勧めは下記のサイトです。テーブル設計から入って正規化についてきっちり説明されてます。

もう一度学ぶMS-Access

追記

コメントでその場限りでデータペースとしての活用を考えていないとのことなので、
その場限りの対処法を。

SQL

1SELECT 2 品名, 3 Forms!フォーム1!AS, 4 Choose(Forms!フォーム1!, 5 [1月の合計],[2月の合計],[3月の合計],[4月の合計], 6 [5月の合計],[6月の合計],[7月の合計],[8月の合計], 7 [9月の合計],[10月の合計],[11月の合計],[12月の合計],) AS 合計 8FROM インポートテーブル;

ただ、「データベースとしての利用目的が薄いデータ」をなぜわざわざAccessで扱うのか、
エクセルで処理すればいいのでは、という本質的な疑問点は残りますが。

投稿2019/08/20 05:22

編集2019/08/20 11:44
hatena19

総合スコア33699

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

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

sazi

2019/08/20 05:26

オスの続きが知りたい
hatena19

2019/08/20 05:28

あれ、入力したつもりだったが確定してなかったみたいですね。(;^ω^)
hatena19

2019/08/20 05:38

編集画面の更新ボタンがなぜか押せなくなっているので、ここに追記しておきます。 最近の私のお勧めは下記のサイトです。 もう一度学ぶMS-Access https://www.accessdbstudy.net/
hatena19

2019/08/20 05:41

回答、更新できました。
ryosuke2001

2019/08/20 11:06

hatena19様 ご回答ありがとう御座います。 解釈と落とし込みに時間が掛かり、お礼のご連絡が遅くなりました。 また、恐縮ですがキャプチャ2の完成イメージをSQLに表した場合、 以下のようになるかと思います。 ↓↓↓ SELECT [インポートテーブル].[品名], [インポートテーブル クエリ].[3月の合計] FROM [インポートテーブル]; こちらの[3月の合計]の部分に関してフォーム等を利用して参照値(=参照先)を変更可能かと考えておりました。 今回、完成のイメージを食品を例とさせて頂いておりましたが、 ソフト開発の完成or進行基準の売上をイチ契約イチEXCELで管理されているため、 データベースとしての利用目的が薄いデータとなります。 そのため対象月を抽出して参照したいという発想で、今回のご質問をさせていただいておりました。 その上でACCESSで実行する方法は無いでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問