サブフォームを含むフォーム (一対多のフォーム) を作成する

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Access でリレーショナル データを操作する場合、多くの場合、同じフォームで複数のテーブルまたはクエリを表示する必要があります。 たとえば、1 つのテーブルの顧客データと別のテーブルの顧客注文情報を同時に表示したい場合があります。 サブフォームを使用するとそれが簡単になります。Access では、サブフォームを簡単に作成する方法がいくつか用意されています。

目的に合ったトピックをクリックしてください

サブフォームの概要

サブフォームは、別のフォームに挿入されるフォームです。 一次形式はメインフォームと呼ばれ、囲まれた形式はサブフォームと呼ばれます。 フォームとサブフォームの組み合わせは、階層フォーム、マスター/詳細フォーム、または親/子フォームと呼ばれることもあります。

サブフォームは、一対多のリレーションシップを持つテーブルまたはクエリからのデータを表示する場合に特に適しています。 この種類のリレーションシップでは、主テーブルの各レコードの主キー値は、一致するフィールドの (複数の場合もあり) 関連テーブルの複数のレコードのフィールドの値と一致します。 たとえば、従業員データを表示するフォームと、各従業員の注文を表示するサブフォームを作成できます。 "社員" テーブルのデータはリレーションシップの "一" 側となります。 各従業員が複数の注文を持つことができるため、[受注] テーブルのデータはリレーションシップの "多" 側です。

サブフォームを含むフォーム

  1. メイン フォームには、リレーションシップの "一" 側のデータが表示されます。

  2. サブフォームには、リレーションシップの "多" 側のデータが表示されます。

この種類のフォームのメイン フォームとサブフォームはリンクされているため、サブフォームには、メイン フォームの現在のレコードに関連するレコードだけが表示されます。 たとえば、メイン フォームに青木俊之さんの情報が表示されている場合、サブフォームには彼の受注だけが表示されます。 フォームとサブフォームのリンクが解除されると、サブフォームには Nancy の受注だけでなく、すべての受注が表示されます。

次の表に、サブフォームに関連する用語を定義しています。 この記事の手順に従えば、Access によってほとんどの詳細が処理されますが、後で変更を行う必要がある場合は、バックグラウンドで何が行われているのかを把握しておくと役立ちます。

用語 定義
サブフォーム コントロール フォームにフォームを埋め込むコントロール。 サブフォーム コントロールは、データベース内の別のオブジェクト (別のフォーム、テーブル、またはクエリ) の "ビュー" と考えることができます。 サブフォーム コントロールには、コントロールに表示されるデータをメイン フォームのデータにリンクするためのプロパティがあります。
"ソース オブジェクト" プロパティ サブフォーム コントロールのプロパティで、コントロールに表示するオブジェクトを示します。
データシート スプレッドシートのような表形式によるデータの表示。 ソース オブジェクトがテーブルまたはクエリである場合、またはソース オブジェクトが Default View プロパティが Datasheet に設定されているフォームである場合、サブフォーム コントロールはデータシートを表示します。 このようなケースでは、サブフォームはデータシートまたはサブデータシートと呼ばれることがあります。
"リンク子フィールド" プロパティ サブフォーム内のどのフィールドをメイン フォームにリンクするかを指定するサブフォーム コントロールのプロパティ。
"リンク親フィールド" プロパティ サブフォーム コントロールのプロパティは、メイン フォーム上のどのフィールドまたはフィールドをサブフォームにリンクするかを指定します。

注

  • この記事の手順に従う前に、テーブルのリレーションシップを作成することをお勧めします。 テーブルのリレーションシップを作成しておくと、Access でサブフォームとメイン フォーム間にリンクが自動的に作成されます。 データベース内のテーブル間のリレーションシップを表示、追加、または変更するには、[ データベース ツール ] タブの [リレーションシップ ] グループで、[ リレーションシップ] をクリックします。
  • サブフォーム コントロールのソース オブジェクトとしてフォームがある場合、そのサブフォームにはフォーム上に配置するフィールドが含まれます。 単一のフォーム、連続したフォーム、またはデータシートとして表示できます。 フォーム オブジェクトに基づいてサブフォームを作成する利点の 1 つは、 [Quantity] * [Unit price] などの集計フィールドをサブフォームに追加できることです。
  • ソース オブジェクトがテーブルまたクエリとなるサブフォーム コントロールを作成して、データシートまたはピボット ビューをフォームに挿入できます。 詳細については、「サブフォームを作成せずにフォームに関連データを追加する」をご覧ください。

ページの先頭へ

サブフォームを作成または追加する

次の表を使用して、状況に最もふさわしい手順を決定してください。

シナリオ 推奨される手順
Access でメイン フォームとサブフォームの両方を作成し、サブフォームをメイン フォームにリンクします。 フォーム ウィザードを使用してサブフォームを含むフォームを作成する
既存のフォームをメイン フォームとして使用しますが、Access で新しいサブフォームを作成し、そのサブフォームをメイン フォームに追加します。 サブフォーム ウィザードを使用して既存のフォームに 1 つ以上のサブフォームを追加する
既存のフォームをメイン フォームとして使用し、1 つ以上の既存のフォームをそのフォームにサブフォームとして追加します。 フォームに別のフォームをドラッグしてサブフォームを作成する

フォーム ウィザードを使用してサブフォームを含むフォームを作成する

この手順では、フォーム ウィザードを使用して、新しいフォームとサブフォームを組み合わせた構成を作成します。 また、メイン フォームまたはサブフォームとして使用するフォームをまだ作成していない場合には、これが最もすばやく使い始める方法です。

  1. [作成] タブの [フォーム] グループで、[フォーム ウィザード] をクリックします。

  2. ウィザードの最初のページで、[表/クエリ] ボックスの一覧からテーブルまたはクエリを選択します。 この例では、サブフォームの各従業員に対する受注品を表示する "従業員" フォームを作成するには、[ テーブル: 従業員] (一対多リレーションシップの "一" 側) の順に選びます。

    注

    テーブルまたはクエリは好きな順序で選択できます。

  3. テーブルまたはクエリからフォームで使用するフィールドをダブルクリックします。

  4. ウィザードの同じページで、[表/クエリ] ボックスの一覧から、別のテーブルまたはクエリを選択します。 この例では、[受注] テーブル (一対多リレーションシップの "多" 側) を選択します。

  5. テーブルまたはクエリからフォームで使用するフィールドをダブルクリックします。

  6. ウィザードを起動する前にリレーションシップが正しく設定されていることを前提として、[ 次へ] をクリックすると、ウィザードから " データをどのように表示しますか?" (テーブルまたはクエリで表示する方法) が表示されます。 一対多リレーションシップの "一" 側にあるテーブルを選択します。 この例では、[従業員] フォームを作成するには、[ 従業員別] を選択します。 ウィザードにはフォームの小さな図が表示されます。 ページは次の図のようになります。

    フォーム ウィザードのサブフォーム ページを示すスクリーンショット

    フォーム図の下部のボックスはサブフォームを表します。

    注

    ウィザードで [ データを表示する方法] が表示されない場合は、選択したテーブルまたはクエリ間の一対多リレーションシップが Access で検出されなかったことを意味します。 ウィザードは続行されますが、Access はフォームにサブフォームを追加しません。 続行する前に、[ キャンセル] をクリックしてテーブル リレーションシップを調べることができます。

  7. ウィザードのページの下部にある [サブフォームがあるフォーム] をクリックし、[次へ] をクリックします。

  8. [サブフォームのレイアウトを指定してください] ページで、必要なレイアウト オプションをクリックし、[次へ] をクリックします。 どちらのレイアウト スタイルでも、サブフォーム データが行と列に配置されますが、表形式のレイアウトではより多くのオプションが提供されます。 表形式のサブフォームには、色、グラフィック、およびその他の書式要素を追加できますが、データシートの場合は、テーブルのデータシート ビューと同様に簡素な形式になります。

  9. ウィザードの次のページで、フォームの書式設定を選び、[次へ] をクリックします。 前のページで [表形式] を選んだ場合、選んだ書式設定はサブフォームにも適用されます。

  10. ウィザードの最後のページで、フォームのタイトルを入力します。 入力したフォームおよびサブフォームのタイトルに基づいて、フォームの名前とサブフォームのラベルが決まります。

  11. フォームをフォーム ビューで開くために情報を表示または入力できるようにするか、デザイン ビューで開くためにデザインを変更できるようにするかを指定して、[ 完了] をクリックします。 Access では、サブフォーム コントロールを含むメイン フォーム用のフォームとサブフォーム自体用のフォームの 2 つが作成されます。

ページの先頭へ

サブフォーム ウィザードを使用して既存のフォームに 1 つ以上のサブフォームを追加する

この手順を使用して、1 つ以上のサブフォームを既存のフォームに追加します。 サブフォームごとに、Access で新しいフォームを作成するか、既存のフォームをサブフォームとして使用するかを選択できます。

  1. ナビゲーション ウィンドウで既存のフォームを右クリックし、[デザイン ビュー] をクリックします。
  2. [ フォーム デザイン ] タブの [ コントロール ] グループで、下矢印をクリックして コントロール ギャラリーを表示し、[ コントロール ウィザードの使用] が選択されていることを確認します。
  3. [ フォーム デザイン] タブの [コントロール ] グループで、[ サブフォーム/サブレポート ] ボタンをクリックします。
  4. サブフォームを配置するフォームをクリックします。
  5. ウィザードに表示される指示に従って操作します。 [完了] をクリックすると、フォームにサブフォーム コントロールが追加されます。 既存のフォームを使用せずに、新しいフォームを作成することを選択した場合、Access で新しいフォーム オブジェクトが作成されて、ナビゲーション ウィンドウにそのオブジェクトが追加されます。

フォームに別のフォームをドラッグしてサブフォームを作成する

既存のフォームをメイン フォームとして使用し、1 つ以上の既存のフォームをサブフォームとして追加する場合は、この手順に従います。

  1. ナビゲーション ウィンドウで、メイン フォームとして使用するフォームを右クリックし、[レイアウト ビュー] をクリックします。
  2. サブフォームとして使用するフォームをナビゲーション ウィンドウからメイン フォームにドラッグします。 Access では、サブフォーム コントロールがメイン フォームに追加され、そのコントロールが、ナビゲーション ウィンドウからドラッグしたフォームにバインドされます。 また、データベースで定義されているリレーションシップに基づいて、メイン フォームへのサブフォームのリンクも試行されます。
  3. この手順を繰り返して、追加のサブフォームをメイン フォームに追加します。
  4. リンクの設定が成功したかどうかを確認するには、[ホーム] タブの [ビュー] グループで、[ビュー]、[フォーム ビュー] の順にクリックし、メイン フォームのレコード セレクターを使用して、レコード間を移動します。 各社員のサブフォームが正しくフィルター処理されている場合、手順は完了です。

前のテストが機能しない場合、Access はサブフォームをメイン フォームにリンクする方法を決定できず、サブフォーム コントロールの Link Child Fields プロパティと Link Master Fields プロパティは空白です。 これらのプロパティは、次の手順を使用して手動で設定する必要があります。

  1. ナビゲーション ウィンドウでメイン フォームを右クリックし、[デザイン ビュー] をクリックします。

  2. サブフォーム コントロールを 1 回クリックして選択します。

  3. [プロパティ シート] 作業ウィンドウが表示されていない場合は、 F4 キーを押すと表示されます。

  4. プロパティ シートで、[データ] タブをクリックします。

  5. [Link Child Fields] プロパティ ボックスの横にある [ビルド] ボタンをクリックします。 [ サブフォーム フィールド リンカー] ダイアログ ボックスが表示されます。

  6. [親フィールド] ボックスと [子フィールド] ボックスの一覧から、フォームをリンクするフィールドを選択し、[OK] をクリックします。 使用するフィールドが不確かな場合は、[推奨] をクリックすると、Access によってリンク フィールドが判定されます。

    ヒント

    フォームのリンクに使用するフィールドが表示されない場合は、マスター フォームまたは子フォームのレコード ソースを編集して、リンク フィールドが含まれていることを確認する必要があります。 たとえば、フォームがクエリに基づく場合は、リンク フィールドがクエリ結果に必ず存在するようにします。

  7. メイン フォームを保存した後でフォーム ビューに切り替え、フォームが期待どおりに動作することを確認します。

デザイン ビューの新しいウィンドウでサブフォームを開く

デザイン ビューでメイン フォームを操作している間にサブフォームにデザインの変更を加える場合は、サブフォームを独自のウィンドウで開くことができます。

  1. サブフォームをクリックして選びます。
  2. [ フォーム デザイン] タブの [ツール ] グループで、[ 新しいウィンドウのサブフォーム] をクリックします。

ページの先頭へ

サブフォームの既定のビューを変更する

フォームにサブフォームを追加すると、サブフォーム/サブレポート コントロールは、サブフォームの Default View プロパティに従ってサブフォームを表示します。 このプロパティには、次の値を設定できます。

  • 単票フォーム
  • 帳票フォーム
  • データシート
  • 分割フォーム

サブフォームを初めて作成するときは、このプロパティを [連続フォーム ] または [単一フォーム] に設定することができます。 ただし、サブフォームの Default View プロパティを Datasheet に設定すると、サブフォームはメイン フォーム上にデータシートとして表示されます。

サブフォームの Default View プロパティを設定するには、次のようにします。

  1. 開いているすべてのオブジェクトを閉じます。

  2. ナビゲーション ウィンドウでサブフォームを右クリックし、[デザイン ビュー] をクリックします。

  3. プロパティ シートが表示されていない場合は、 F4 キーを押して表示します。

  4. プロパティ シートの上部にあるドロップダウン リストで、[フォーム] が選択されていることを確認します。

  5. プロパティ シートの [書式] タブで、[既定のビュー] プロパティを、使用するビューに設定します。

    注

    使用するビューが一覧にない場合は、そのビューの Allow...View プロパティが [はい] に設定されていることを確認します。 たとえば、フォームの既定のビューとして [データシート] を指定する場合は、[データシートビューの許可] プロパティが [はい] に設定されているか確認します。

  6. サブフォームを保存して閉じ、メイン フォームを開いて結果を確認します。

ページの先頭へ

関連するデータを表示するために、必ずしも別のフォーム オブジェクトを作成する必要はありません。 たとえば、レイアウト ビューまたはデザイン ビューで作業している場合、ナビゲーション ウィンドウからテーブルまたはクエリをフォームにドラッグすると、Access ではそのオブジェクトのデータを表示するサブフォーム/サブレポート コントロールが作成されます。 オブジェクトの Default View プロパティによって、データの表示方法が決まります。 通常はデータシート ビューに設定されていますが、テーブルまたはクエリの Default View プロパティを単 一フォーム、 分割フォーム、または 連続フォームに設定して、関連データをフォームに表示する際の柔軟性を高めることもできます。

注

テーブルまたはクエリの Default View プロパティを変更すると、ナビゲーション ウィンドウから開くか、サブフォーム/サブレポート コントロールで表示するかにかかわらず、テーブルまたはクエリを開くときに、テーブルまたはクエリがどのように表示されるかが決まります。 テーブルの表示設定を変更すると、ナビゲーション ウィンドウからテーブルを開くときに混乱することがあるため、テーブルの代わりにこの手順のクエリを使用することをお勧めします。

ページの先頭へ