フォームウィザードで2つのテーブルやクエリを指定して、関連付けされたメインフォームとサブフォームを作成できます。
フォーム作成のもとになるテーブルやクエリにリレーションシップ(関連付け)がされていると簡単に作成できます。
以下の画像は、伝票№で関連付けられたサブフォームを含むフォームです。
参考ここでは[ウィンドウを重ねて表示する]の設定にしています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
この記事の目次
テーブルとリレーションシップの確認
サンプルとして、4つのテーブルがあります。
[T_売上伝票]、[T_売上明細]、[T_担当]、[T_製品]
[主キー]の設定
各テーブルには[主キー]の設定をしています。各テーブルのデザインビューです。
参考主キーの設定については、以下の記事で詳しく解説しています。
-
Accessテーブルの[主キー]の設定
Accessのテーブルでは、[主キー](シュキー)を設定することができます。[主キー]とは、各レコードを固有のものとして識別するフィールドの ...
リレーションシップと参照整合性の設定
リレーションシップウィンドウを開いて、リレーションシップと参照整合性の設定を行っています。
4つのテーブルをデータシートビューで開くと、以下のようになっています。
レコードの左端に表示されている[+]は[展開インジゲーター]と呼ばれるものです。
リレーションの設定を行うと表示されます。[+]をクリックすると、サブデータシートを表示でき、関連付けしたテーブルの内容を確認できます。
参考リレーションシップと参照整合性については、以下の記事で詳しく解説しています。
-
リレーションシップの作成と参照整合性の設定
Accessでは、複数のテーブルがあって、そのテーブル間の共通フィールドを関連付けることができます。この関連付けのことを[リレーションシップ ...
サブデータシートについては、以下の記事で解説しています。
-
サブデータシートはテーブルプロパティで手動設定できる
Accessのテーブル間でリレーションシップの設定すると、2つのテーブルに関連性が生じます。 テーブルをデータシートビューで開くと、各レコー ...
フォーム作成のもとになるクエリの作成
メインフォームとサブフォームのもとになるクエリを作成します。
[作成]タブの[クエリ]グループにある[クエリデザイン]をクリックします。
メインフォームのもとになるクエリの作成
メインフォームのもとになるクエリを作成します。
クエリウィンドウに、テーブル[T_売上伝票]と[T_担当]を表示して、デザイングリッドに以下のように追加します。
リレーションシップウィンドウで設定した参照整合性は、クエリにも反映されます。
[担当者名]を表示するために[T_担当]からフィールドを追加します。
また、[伝票№]の昇順に並べたいので、[伝票№]の[並べ替え]で[昇順]を選択します。
[デザイン]タブの[結果]グループにある[表示]をクリックして確認します。
以下のように表示されます。クエリは、[Q_売上伝票]という名前を付けて保存します。
キーボードから[F12]キーを押すと、[名前を付けて保存]ダイアログボックスを表示できます。
作成したクエリは閉じておきます。
サブフォームのもとになるクエリの作成
サブフォームのもとになるクエリを作成します。
同じく[作成]タブの[クエリ]グループにある[クエリデザイン]をクリックして、クエリウィンドウを表示します。
クエリウィンドウに、テーブル[T_売上明細]と[T_製品]を表示して、デザイングリッドに以下のように追加します。
[製品名]と[販売単価]を表示するために[T_製品]からフィールドを追加します。
また、[明細№]の昇順に並べたいので、[明細№]の[並べ替え]で[昇順]を選択します。
[金額]の演算フィールドを追加します。
演算フィールド名:式
ここでは、以下のような式になります。
金額: [販売単価]*[数量]
[デザイン]タブの[結果]グループにある[表示]をクリックして確認します。
名前を付けて保存します。ここでは、[Q_売上明細]とします。
フォームウィザードを使ってサブフォームを含むフォームを作成
[作成]タブの[フォーム]グループにある[フォームウィザード]をクリックします。
フォームウィザードが表示されます。
フォームウィザードでは、複数のテーブルまたはクエリからフィールドを選択できます。
[テーブル/クエリ]の▼ボタンをクリックして、[クエリ:Q_売上伝票]を選択します。
フォームに表示したいフィールドを選択します。
ここでは、すべてのフィールドを表示したいので、[>>]ボタンをクリックします。
続けて、[テーブル/クエリ]の▼ボタンをクリックして、[クエリ:Q_売上明細]を選択します。
サブフォームに表示したいフィールドのみを選択します。ここでは全てのフィールドを表示したいので[>>]ボタンをクリックします。
以下のように、[選択したフィールド]にクエリ[Q_売上明細]のすべてのフィールドが表示されます。
[次へ]ボタンをクリックします。
参考リレーションができていない場合は、ここで[次へ]のボタンをクリックした時にメッセージウィンドウが表示されます。選択したクエリやテーブルが間違っていないか、あるいは、リレーションシップウィンドウを開いて確認してください。
選択したフィールドのレコードソースにアクセスできません。テーブルと、そのテーブルを基にしたクエリのフィールドを選択した可能性があります。もしそうであれば、テーブルかクエリのどちらかのフィールドだけを選択してください。
データの表示方法を選択します。
[byQ_売上伝票]と[サブフォームがあるフォーム]を選択します。
[次へ]ボタンをクリックします。
参考ここで[リンクされたフォーム]を選択した場合のフォームの形については、以下で記しています。
サブフォームのレイアウトを選択します。
[表形式]と[データシート]がありますが、ここでは[データシート]を選択します。
[次へ]のボタンをクリックします。
参考サブフォームにヘッダーやフッターを表示したい場合は、[表形式]を選択します。[データシート]では、フッターやヘッダーは表示できません。
サブフォームのレイアウトは、完成後に編集して、レイアウトも変更できますが、フィールドが多い場合は修正も大変な作業になることもありますので、よく考えて選択したほうがいいと思います。
フォームとサブフォームに名前を付けます。
[完了]ボタンをクリックします。
以下のようなフォームが作成できます。
ナビゲーションウィンドウを見ると、2つのフォームが作成されています。
後は、デザインビューなどに切り替えて体裁を整えます。
参考リレーションシップがきちんと設定できていれば、フォームウィザードを使用しなくても、フォームを作成するだけで(ワンクリック)で作成できます。
この場合、サブフォームはデータシートになります。
-
サブフォームを含むフォームを簡単作成
Accessで1つのフォーム上に2つのテーブルの情報を表示して、同時に閲覧できると便利な場合があります。 たとえば、[得意先]テーブルと[受 ...
サブフォームを含むフォームで新規レコードを入力する場合は、メインフォーム側から先に入力します。
また、サブフォームは共通フィールド[伝票№]でリンクされていますので、サブフォーム側の[伝票№]は入力する必要はありません。
ウィザードの[表形式]と[データシート]の違い
ウィザードの[サブフォームのレイアウトを選択してください。]で[表形式]を選択すると、以下のようになります。
[表形式]を選択した場合は、サブフォームにヘッダーやフッターを表示できます。
[データシート]の場合は、ヘッダーやフッターを表示できません。
例えば、サブフォームに合計値のテキストボックスなどを表示したい場合は、[表形式]を選択してください。
作成した後にレイアウトを変更したい場合は、サブフォームをデザインビューで開いて、フォームのプロパティを開いて、[書式]タブの[既定のビュー]から変更できます。
ただし、コントロールが多い場合は、レイアウトが面倒なこともあるので、できればウィザードで選択を間違えないようにしたほうがいいです。
サブフォームのプロパティでリンクフィールドを確認
作成したメインフォームをデザインビューで開いて、サブフォームを選択してプロパティを表示します。
[データ]タブをクリックすると、サブフォームとなっているフォーム名、リンク親フィールドとリンク子フィールドを確認できます。
ここでは、メインもサブも[伝票№]でリンクされていることが分かります。
リンク親フィールドは、メインフォーム側のフィールドです。リンク子フィールドは、サブフォーム側のフィールドです。
注意サブフォームの名前を変更した場合、ここのソースオブジェクトが変更されていないことがあります。サブフォームの名前を変更した場合は気をつけてください。
メインフォームに金額の合計を表示
サブフォームに表示している金額の合計をメインフォームの非連結のテキストボックスに表示することができます。
メインフォームをデザインビューで開きます。
サブフォームのフッターに金額の合計を表示
サブフォームのフッターに金額の合計を表示するために、非連結のテキストボックスを追加します。
サブフォームにフッターが表示されていない場合は、以下の記事を参考に表示してください。
-
フォームヘッダー/フッターの表示(タイトル・ロゴ・日付と時刻の挿入)
Access2013のフォームで[フォームのヘッダー/フッター]を表示する方法です。 フォームをデザインビューで開くと、以下のようになってい ...
[デザイン]タブのコントロールから[テキストボックス]を選択して、フッターの任意の位置でドラッグします。
ここでは、ラベルは不要なので、[Ctrl]キーを押しながらドラッグします。テキストボックスのみを挿入できます。
テキストボックスのプロパティを開いて、[その他]タブでテキストボックスの名前を変更します。ここでは、[合計]にします。
[データ]タブの[コントロールソース]に以下のように入力して合計値を表示します。
=Sum([金額])
メインフォームにサブフォームのコントロールの値を表示
今度は、メインフォームに非連結のテキストボックスを挿入します。
[デザイン]タブのコントロールから[テキストボックス]を選択します。
メインフォームの詳細領域でドラッグして、テキストボックスを挿入します。
非連結のテキストボックスのプロパティを表示します。
[データ]タブの[コントロールソース]に、以下のように入力します。
=[F_売上明細 サブフォーム].[Form]![合計]
[書式]タブに切り替えて、[書式]で[通貨]を選択します。
ラベルの標題は、[合計]にします。
フォームビューに切り替えて確認すると、以下のようになります。
フォームのコントロールの値を表示する方法は、以下の記事でも解説しています。
-
テキストボックスにフォームのコントロールの値を表示するには
Accessでフォームを作成した後、非連結のテキストボックスを挿入して、フォームを開いたときに表示したい値があるという場合の方法です。 この ...
参考フォームウィザードのデータの表示方法を指定する箇所で[リンクされたフォーム]を選択すると、
以下のようなフォームを作成できます。
ボタンをクリックして[伝票№]でリンクされた明細フォームを開くことができます。
この場合は、ボタンをクリックして表示されるフォームは、帳票フォームになります。
ウィザードで[リンクされたフォーム]を選択して[次へ]のボタンをクリックしても、フォームのレイアウトを選択する画面は表示されません。
テーブル間のリレーションがしっかりできていると、Accessの機能を十分に使いこなすことができます。
コントロールの[サブフォーム/サブレポート]ボタンを使って、サブフォームを埋め込むこともできます。既存のフォームがあれば、こちらの方法もお勧めです。
-
サブフォームウィザードを使ってメインフォームへサブフォームを組み込む
メインフォームにサブフォームを組み込んで、サブフォームを含むフォームを作成できます。 コントロールの[サブフォーム/サブレポート]ボタンを使 ...