Access でリレーショナル データ (個別のテーブルに格納されている関連データ) を操作する場合、多くの場合、同じフォームで複数のテーブルまたはクエリを表示する必要があります。 たとえば、あるテーブルの顧客データと、別のテーブルからの顧客注文に関する情報を同時に表示できます。 サブフォームは、これを行うための便利なツールであり、Access にはサブフォームをすばやく作成するのに役立ついくつかの方法が用意されています。
目的に合ったトピックをクリックしてください
- サブフォームの概要
- サブフォームを作成または追加する
- フォーム ウィザードを使用してサブフォームを含むフォームを作成する
- サブフォーム ウィザードを使用して既存のフォームに 1 つ以上のサブフォームを追加する
- フォームに別のフォームをドラッグしてサブフォームを作成する
- デザイン ビューの新しいウィンドウでサブフォームを開く
- サブフォームの既定のビューを変更する
- サブフォームを作成せずにフォームに関連データを追加する
サブフォームの概要
サブフォームとは、他のフォームの中に挿入されるフォームです。 基になるフォームをメイン フォームと呼び、フォームに包含されるフォームをサブフォームと呼びます。 フォーム/サブフォーム構成のことを "階層フォーム"、"マスター/詳細フォーム"、または "親/子フォーム" ということもあります。
サブフォームは、一対多リレーションシップを持つテーブルまたはクエリのデータを表示する場合に特に便利です。 一対多リレーションシップとは、主テーブル内の各レコードのプライマリ キー値が関連テーブルの多くのレコードの対応するフィールド値と一致する、2 つのテーブル間の関連付けのことです。 たとえば、社員のデータを表示するフォームを作成し、各社員の受注を表示するサブフォームを含めることができます。 "社員" テーブルのデータはリレーションシップの "一" 側となります。 "受注" テーブルのデータはリレーションシップの "多" 側になります (各社員は複数の受注を持つことができます)。
1. メイン フォームには、リレーションシップの "1" 側のデータが表示されます。
2. サブフォームには、リレーションシップの "多" 側からのデータが表示されます。
この種類のフォームのメイン フォームとサブフォームはリンクされているため、サブフォームには、メイン フォームの現在のレコードに関連するレコードだけが表示されます。 たとえば、メイン フォームに青木俊之さんの情報が表示されている場合、サブフォームには彼の受注だけが表示されます。 フォームとサブフォームがリンクされていない場合、サブフォームには青木さんの受注だけでなく、すべての受注が表示されます。
次の表に、サブフォームに関連するいくつかの用語を示します。 この記事に示されている手順を使用した場合は細部の処理が Access によって行われますが、後で修正を加える場合に背後でどのような処理が行われているかを知っておくことは重要です。
| 用語 | 定義 |
|---|---|
| サブフォーム コントロール | フォームにフォームを埋め込むコントロール。 サブフォーム コントロールは、データベース内の別のオブジェクト (別のフォーム、テーブル、またはクエリ) の "ビュー" と考えることができます。 サブフォーム コントロールには、コントロールに表示されるデータをメイン フォームのデータにリンクするためのプロパティがあります。 |
| "ソース オブジェクト" プロパティ | サブフォーム コントロールのプロパティで、コントロールに表示するオブジェクトを示します。 |
| データシート | スプレッドシートのような表形式によるデータの表示。 ソース オブジェクトがテーブルまたはクエリの場合、または [既定のビュー] プロパティが [データシート] に設定されているフォームをソース オブジェクトとして使用している場合は、サブフォーム コントロールにデータシートが表示されます。 このようなケースでは、サブフォームはデータシートまたはサブデータシートと呼ばれることがあります。 |
| "リンク子フィールド" プロパティ | サブフォーム コントロールのプロパティ。メイン フォームにサブフォームをリンクするサブフォーム内のフィールドを指定します。 |
| "リンク親フィールド" プロパティ | サブフォーム コントロールのプロパティ。サブフォームにメイン フォームをリンクするメイン フォーム内のフィールドを指定します。 |
注
- この記事の手順に従う前に、テーブルのリレーションシップを作成することをお勧めします。 テーブルのリレーションシップを作成しておくと、Access でサブフォームとメイン フォーム間にリンクが自動的に作成されます。 データベース内のテーブル間のリレーションシップを表示、追加、または変更するには、[ データベース ツール ] タブの [ リレーションシップ ] グループで [ リレーションシップ] をクリックします。
- サブフォーム コントロールがソース オブジェクトとしてフォームを持つ場合は、フォームに配置されたフィールドを含み、単票フォーム、帳票フォーム、またはデータシートとして表示できます。 フォーム オブジェクトに基づいたサブフォームを使用する 1 つの利点は、[数量] * [単価] のような演算フィールドをサブフォームに追加できる点です。
- ソース オブジェクトがテーブルまたクエリとなるサブフォーム コントロールを作成して、データシートまたはピボット ビューをフォームに挿入できます。 詳細については、「サブフォームを作成せずにフォームに関連データを追加する」をご覧ください。
サブフォームを作成または追加する
次の表を使用して、状況に最もふさわしい手順を決定してください。
| シナリオ | 推奨される手順 |
|---|---|
| Access でメイン フォームとサブフォームの両方を作成し、サブフォームをメイン フォームにリンクします。 | フォーム ウィザードを使用してサブフォームを含むフォームを作成する |
| 既存のフォームをメイン フォームとして使用しますが、Access で新しいサブフォームを作成し、そのサブフォームをメイン フォームに追加します。 | サブフォーム ウィザードを使用して既存のフォームに 1 つ以上のサブフォームを追加する |
| 既存のフォームをメイン フォームとして使用し、1 つ以上の既存のフォームをそのフォームにサブフォームとして追加します。 | フォームに別のフォームをドラッグしてサブフォームを作成する |
フォーム ウィザードを使用してサブフォームを含むフォームを作成する
この手順では、フォーム ウィザードを使用して、新しいフォームとサブフォームを組み合わせた構成を作成します。 この方法を使用すると、メイン フォームまたはサブフォームとして使用するフォームをまだ作成していない場合に、簡単に始めることができます。
[作成] タブの [フォーム] グループで、[フォーム ウィザード] をクリックします。
ウィザードの最初のページで、[表/クエリ] ボックスの一覧からテーブルまたはクエリを選択します。 たとえば、各社員の受注を表示するサブフォームを含む "社員" フォームを作成するには、一対多リレーションシップの "一" 側に "テーブル: 社員" を選択します。
注
テーブルまたはクエリは好きな順序で選択できます。
テーブルまたはクエリからフォームで使用するフィールドをダブルクリックします。
ウィザードの同じページで、[表/クエリ] ボックスの一覧から、別のテーブルまたはクエリを選択します。 たとえば、一対多リレーションシップの "多" 側のテーブルとして "受注" テーブルを選択します。
テーブルまたはクエリからフォームで使用するフィールドをダブルクリックします。
ウィザードを開始する前にリレーションシップを正しく設定したと仮定して、[ 次へ] をクリックすると、ウィザードは データを表示する方法 (つまり、テーブルまたはクエリ) を求めます。 一対多リレーションシップの "1" 側でテーブルを選択します。 この例では、[従業員] フォームを作成するために、[ 従業員] をクリックします。 ウィザードには、フォームの小さな図が表示されます。 ページは次の図のようになります。
フォーム図の下部のボックスはサブフォームを表します。注
ウィザードで [ データの表示方法] が表示されない場合は、選択したテーブルまたはクエリ間の 1 対多リレーションシップが検出されなかったことを意味します。 ウィザードは続行されますが、Access はフォームにサブフォームを追加しません。 続行する前に、[ キャンセル ] をクリックし、テーブルリレーションシップを調べることができます。
ウィザードのページの下部にある [サブフォームがあるフォーム] をクリックし、[次へ] をクリックします。
[サブフォームのレイアウトを指定してください] ページで、必要なレイアウト オプションをクリックし、[次へ] をクリックします。 どちらのレイアウト スタイルでも、サブフォーム データを行と列に配置できますが、表形式のレイアウトの方が自由にカスタマイズできます。 表形式のサブフォームには、色、グラフィック、およびその他の書式要素を追加できますが、データシートの場合は、テーブルのデータシート ビューと同様に簡素な形式になります。
ウィザードの次のページで、フォームの書式設定を選び、[次へ] をクリックします。 前のページで [表形式] を選んだ場合、選んだ書式設定はサブフォームにも適用されます。
ウィザードの最後のページで、フォームのタイトルを入力します。 入力したフォームおよびサブフォームのタイトルに基づいて、フォームの名前とサブフォームのラベルが決まります。
フォームをフォーム ビューまたはデザイン ビューのどちらで開くかを指定します。情報を表示または入力する場合はフォーム ビュー、デザインを変更する場合はデザイン ビューを指定し、[完了] をクリックします。
Access で、サブフォーム コントロールが挿入されたメイン フォームとサブフォーム自身用に 2 つのフォームが作成されます。
サブフォーム ウィザードを使用して既存のフォームに 1 つ以上のサブフォームを追加する
この手順を使用して、1 つ以上のサブフォームを既存のフォームに追加します。 サブフォームごとに、Access で新しいフォームを作成するか、既存のフォームをサブフォームとして使用するかを選択できます。
- ナビゲーション ウィンドウで既存のフォームを右クリックし、[デザイン ビュー] をクリックします。
- [ フォーム デザイン ] タブの [ コントロール ] グループで、下矢印をクリックして コントロール ギャラリーを表示し、[ コントロール ウィザードの使用 ] が選択されていることを確認します。
- [ フォーム デザイン ] タブの [ コントロール ] グループで、[ サブフォーム/サブレポート ] ボタンをクリックします。
- フォーム上のサブフォームを配置する場所をクリックします。
- ウィザードに表示される指示に従って操作します。
[完了] をクリックすると、フォームにサブフォーム コントロールが追加されます。 既存のフォームを使用せずに、新しいフォームを作成することを選択した場合、Access で新しいフォーム オブジェクトが作成されて、ナビゲーション ウィンドウにそのオブジェクトが追加されます。
フォームに別のフォームをドラッグしてサブフォームを作成する
既存のフォームをメイン フォームとして使用し、1 つ以上の既存のフォームをそのフォームにサブフォームとして追加する場合は、この手順を使用します。
- ナビゲーション ウィンドウで、メイン フォームとして使用するフォームを右クリックし、[レイアウト ビュー] をクリックします。
- サブフォームとして使用するフォームをナビゲーション ウィンドウからメイン フォームにドラッグします。
Access では、サブフォーム コントロールがメイン フォームに追加され、そのコントロールが、ナビゲーション ウィンドウからドラッグしたフォームにバインドされます。 また、データベースで定義されているリレーションシップに基づいて、メイン フォームへのサブフォームのリンクも試行されます。 - この手順を繰り返して、追加のサブフォームをメイン フォームに追加します。
- リンクの設定が成功したかどうかを確認するには、[ホーム] タブの [ビュー] グループで、[ビュー]、[フォーム ビュー] の順にクリックし、メイン フォームのレコード セレクターを使用して、レコード間を移動します。 各社員のサブフォームが正しくフィルター処理されている場合、手順は完了です。
前のテストが成功しなかった場合は、Access でサブフォームをメイン フォームに、リンクする方法を判定できなかったために、サブフォーム コントロールのリンク子フィールド プロパティとリンク親フィールド プロパティは空になっています。 これらのプロパティは、次の手順を使用して手動で設定する必要があります。
ナビゲーション ウィンドウでメイン フォームを右クリックし、[デザイン ビュー] をクリックします。
サブフォーム コントロールを 1 回クリックして選択します。
[プロパティ シート] 作業ウィンドウが表示されていない場合は、F4 キーを押して表示します。
プロパティ シートで、[データ] タブをクリックします。
[子フィールドのリンク] プロパティ ボックスの横にある [ビルド]
をクリックします。
[サブフォーム フィールド リンク ビルダー] ダイアログ ボックスが表示されます。[親フィールド] ボックスと [子フィールド] ボックスの一覧から、フォームをリンクするフィールドを選択し、[OK] をクリックします。 使用するフィールドが不確かな場合は、[推奨] をクリックすると、Access によってリンク フィールドが判定されます。
ヒント
フォームをリンクするために使用しようとしているフィールドが表示されない場合は、リンク フィールドが含まれるように親フォームまたは子フォームのレコード ソースを編集する必要があります。 たとえば、フォームがクエリに基づく場合は、リンク フィールドがクエリ結果に必ず存在するようにします。
メイン フォームを保存した後でフォーム ビューに切り替え、フォームが期待どおりに動作することを確認します。
デザイン ビューの新しいウィンドウでサブフォームを開く
デザイン ビューでメイン フォームを操作している間にサブフォームにデザインの変更を加える場合は、サブフォームを独自のウィンドウで開くことができます。
- サブフォームをクリックして選びます。
- [ フォーム デザイン ] タブの [ ツール ] グループで、[ 新しいウィンドウ] で [サブフォーム] をクリックします。
サブフォームの既定のビューを変更する
サブフォームをフォームに追加すると、サブフォームの Default View プロパティに従ってサブフォーム/サブレポート コントロールにサブフォームが表示されます。 このプロパティには、次の値を設定できます。
- 単票フォーム
- 帳票フォーム
- データシート
- 分割フォーム
サブフォームを初めて作成するときは、このプロパティを [帳票フォーム] に設定するか、[単票フォーム] に設定することもできます。 ただし、サブフォームの [既定のビュー] プロパティを [データシート] に設定すると、サブフォームはメイン フォームのデータシートとして表示されます。
サブフォームの "既定のビュー" プロパティを設定するには、次の手順を実行します。
開いているすべてのオブジェクトを閉じます。
ナビゲーション ウィンドウでサブフォームを右クリックし、[デザイン ビュー] をクリックします。
プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。
プロパティ シートの上部にあるドロップダウン リストで、[フォーム] が選択されていることを確認します。
プロパティ シートの [書式] タブで、[既定のビュー] プロパティを、使用するビューに設定します。
注
使用するビューが一覧にない場合は、"許可...ビューの View" プロパティが [はい] に設定されています。 たとえば、フォームの既定のビューとして [データシート] を指定する場合は、[データシートビューの許可] プロパティが [はい] に設定されているか確認します。
サブフォームを保存して閉じ、メイン フォームを開いて結果を確認します。
サブフォームを作成せずにフォームに関連データを追加する
関連データを表示するのに常に個別のフォーム オブジェクトを作成する必要はありません。 たとえば、レイアウト ビューまたはデザイン ビューで作業している場合、ナビゲーション ウィンドウからテーブルまたはクエリをフォームにドラッグすると、Access ではそのオブジェクトのデータを表示するサブフォーム/サブレポート コントロールが作成されます。 オブジェクトの Default View プロパティは、データの表示方法を決定します。 通常はデータシート ビューに設定されますが、テーブルやクエリの [既定のビュー] プロパティを [単票フォーム]、[分割フォーム]、または [帳票フォーム] に設定すると、より柔軟に関連データをフォームに表示することができます。
注
テーブルまたはクエリの 既定のビュー プロパティを変更すると、ナビゲーション ウィンドウから開くか、サブフォーム/サブレポート コントロールで表示するかに関係なく、テーブルまたはクエリの表示方法が決まります。 テーブルのビュー設定を変更すると、ナビゲーション ウィンドウからテーブルを開くときに混乱が生じることがあるため、テーブルの代わりにこのプロシージャのクエリを使用することをお勧めします。