Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : その他)
クエリのフィールド名をフォームから変更したい
投稿日時: 22/06/02 18:21:24
投稿者: ナランヤサ

お世話になります。
 
作成したクエリのフィールド名の中に"20xx年度"というのがあります。
20xx年度は2000年度〜2022年度までありますがクエリでは単年度だけ指定します。
このフィールドの年度をフォームのコンボボックス(2000〜2022)から指定して
その年度でデータを作成したいです。
 
フォームのコンボボックスで2010を指定したら
クエリのフィールドで2010年度が選択されて
2010年度のデータが作成される
 
フォームのコンボボックスで2022を指定したら
クエリのフィールドで2022年度が選択されて
2022年度のデータが作成される
 
クエリのフィールドを手動で変更すればできるのですが
フォームで指定して変更できるようにしたいです。
 
このやり方は可能でしょうか?
可能であればご教示のほどよろしくお願い致します。

回答
投稿日時: 22/06/03 10:54:32
投稿者: sk

引用:
作成したクエリのフィールド名の中に"20xx年度"というのがあります。
20xx年度は2000年度〜2022年度までありますがクエリでは単年度だけ指定します。

まず、どのような構造のテーブルを元にどのようなクエリを
作成されたのかについて、具体的に明記して下さい。
(クエリについては、SQL ビューの内容を記載されることをお奨めします)
 
例えば、「クロス集計クエリ上において、あるフィールドを
列見出しとした結果、[2000年度]から[2022年度]までの
23 個の集計列が展開されている」ということなのであれば、
「クロス集計クエリではなく普通の集計クエリを使え」
という話になります。
 
クロス集計クエリを使用しているのではなく、
「クエリの参照元であるテーブルにおいて、[2000年度]から
[2022年度]までの 23 個のフィールドが定義されている
(非正規形テーブルを使用している)」ということなのであれば、
先にテーブルの正規化を検討されることをお奨めします。
 
引用:
このフィールドの年度をフォームのコンボボックス(2000〜2022)から指定して
その年度でデータを作成したいです。

ここでおっしゃっている「データ」とは、具体的にどのような
出力結果を意味しているのでしょうか。
 
・任意の条件に該当するレコードを抽出するクエリを作成したい。
 
・任意の条件に該当するレコードを抽出するクエリの実行結果を
 別のテーブルに出力したい。
 
・任意の条件に該当するレコードを抽出するクエリの実行結果を
 フォーム上に表示したい。
 
・任意の条件に該当するレコードを抽出するクエリの実行結果を
 レポート上に表示して印刷したい。
 
・任意の条件に該当するレコードを抽出するクエリの実行結果を
 特定の形式のファイル( CSV、Excel ワークシートなど)に出力したい。

投稿日時: 22/06/03 13:36:21
投稿者: ナランヤサ

構造を説明しますと
・テーブル1
テーブル名:会員テーブル
フィールド名:
会員番号
名前
年齢
性別
住所
電話番号
 
・テーブル2
テーブル名:支払テーブル
フィールド名:
会員番号
支払方法
2000年度
2001年度
2002年度
2003年度
 |
 |
2022年度
※年度には2022/06/03のように年月日が入力されています
 
上記のテーブルで選択クエリを作成してます
SELECT 会員テーブル.会員番号, 会員テーブル.性別, 会員テーブル.住所, 会員テーブル.年齢, 会員テーブル.電話番号, 支払テーブル.[2022年度], 支払テーブル.支払方法
FROM 会員テーブル LEFT JOIN 支払テーブル ON 会員テーブル.会員番号 = 支払テーブル.会員番号
WHERE (((支払テーブル.[2022年度]) Is Not Null));
 
上記のクエリで年度のフィールドを2001年度や2018年度と変更する事で
その年に支払った人数と個人データがわかります
最終的には、
任意の条件に該当するレコードを抽出するクエリの実行結果を
特定の形式のファイル( CSV、Excel ワークシートなど)に出力したい。
になります。
 
やりたい事はクエリを開いてフィールドの年度を手動で変更しないで
フォームから年度を指定して支払った人数と個人データを抽出したいと考えています。
コンボボックスで年度していして出力ボタンでCSVかエクセルに出力など
 
説明が解り難かったらすみません
よろしくお願いいたします。
 

回答
投稿日時: 22/06/03 14:44:13
投稿者: sk

引用:
テーブル名:支払テーブル

引用:
年度には2022/06/03のように年月日が入力されています

[支払履歴テーブル]
------------------------------------------------------------
P 会員番号      ([会員テーブル]の[会員番号]と同じデータ型)
P 請求年度      長整数型
  支払年月日    日付/時刻型
  支払方法      (現在のデータ型に従う)
------------------------------------------------------------
( P は主キー)
 
・それぞれの会員による支払手続は 1 つの請求年度につき
 1 回だけ発生する。
 ( 2 回以上に分けて別々の日に支払われることはない)
 
・どのような方法によって支払いが行なわれるかは、その都度異なる。
 (方法がずっと変わらない場合もあれば、ある年度だけ異なる、
  途中から変更される、といった場合も考えられる)
 
という前提なのであれば、上記のようにテーブルを定義された方が
よろしいでしょう。
 
引用:
フォームのコンボボックスで2010を指定したら
クエリのフィールドで2010年度が選択されて
2010年度のデータが作成される

引用:
SELECT 会員テーブル.会員番号, 会員テーブル.性別, 会員テーブル.住所, 会員テーブル.年齢, 会員テーブル.電話番号, 支払テーブル.[2022年度], 支払テーブル.支払方法
FROM 会員テーブル LEFT JOIN 支払テーブル ON 会員テーブル.会員番号 = 支払テーブル.会員番号
WHERE (((支払テーブル.[2022年度]) Is Not Null));

( SQL ビュー)
------------------------------------------------------------
PARAMETERS [Forms]![フォーム名]![コンボボックス名] Long;
SELECT [会員テーブル].[会員番号],
       [会員テーブル].[性別],
       [会員テーブル].[住所],
       [会員テーブル].[年齢],
       [会員テーブル].[電話番号],
       [支払履歴テーブル].[請求年度],
       [支払履歴テーブル].[支払年月日],
       [支払履歴テーブル].[支払方法]
FROM [会員テーブル]
LEFT JOIN [支払履歴テーブル]
ON [会員テーブル].[会員番号] = [支払履歴テーブル].[会員番号]
WHERE [支払履歴テーブル].[請求年度] = [Forms]![フォーム名]![コンボボックス名];
------------------------------------------------------------
 
それぞれの支払いに対応する請求年度を格納するためのフィールドを
テーブルに定義しておけば、そのフィールドの値がコンボボックスに
入力された数値と一致するレコードを抽出することが可能となります。
 
引用:
出力ボタンでCSVかエクセルに出力など

この部分は、マクロか VBA のコードによって実現可能。

回答
投稿日時: 22/06/03 16:57:47
投稿者: Suzu

引用:
フォームから年度を指定して支払った人数と個人データを抽出したいと考えています。
コンボボックスで年度していして出力ボタンでCSVかエクセルに出力など

 
Excel側 から
「データ」-「データの取得」-「データベースから」
  で Accessファイルを指定し
       データの変換 で PowerQuery で選択する 手法もあるかと。
 
Access側で、希望の様に クエリのフィールドを コンボボックスで選択させ クエリに反映させるには
マクロなり、VBAが必要です。

トピックに返信