【フォーム】2種類のサブフォーム作成方法を解説

フォーム

Accessのフォームの中でも、サブフォームは関連するデータを一つの画面に表示することができる便利なフォームです。

本記事ではサブフォームの2種類の作り方について、詳しく解説します。

サブフォームとは

Accessの「サブフォーム」とは、1つのフォームの中に別のフォームを表示する仕組みです。

上記における「別のフォーム」は、フォームである必要はなく、
テーブルやクエリを直接表示することもできます。

例えば、生徒を管理する「生徒マスタ」の中に「成績一覧」を表示するようなケースがあります。

上記2つのテーブルを組み合わせ、各生徒に対して各教科の成績を1画面で閲覧するサブフォーム例はこちらです。

例では横浜太郎さんの成績一覧が下枠に表示されます。生徒を切り替えると、成績一覧も切り替わって表示されます。

このように、サブフォームを使うと、

  • 関連するデータを1画面でまとめて確認できる
  • 親データ(顧客)を切り替えると、自動で子データ(受注)が切り替わる
    というメリットがあります。

サブフォームとテーブルの関連性

サブフォームは、テーブル同士が「1対多」の関係になっているときに特に役立ちます。
「1対多」の関係とは、次のような構成を指します。

テーブル名関係内容
生徒マスタ1生徒別のマスターデータを格納
成績一覧生徒別に試験別、教科別のテスト結果を格納

今回の事例である「生徒と成績」の他、「顧客と注文」「部署と社員」「タスクと発生事由」など様々な[1対多]パターンがありますね

次に、冒頭で紹介した2つのテーブルとサブフォームの関係を図で説明します。

生徒マスタテーブルと成績一覧テーブルを出席番号でリレーションシップによって関連付けると、両テーブルは1対多の関係になります。

つまり、

  • 「横浜太郎」という1人の生徒(1レコード)に対して、
  • 「横浜太郎のテスト結果(6教科分)」という複数のレコード(6件)が紐づく関係です。

サブフォームとの関連が大きいリレーションシップに関しては、こちらの記事を参考にしてみてください。

サブフォームの作成方法

サブフォームの作成方法について、2種類の方法を解説します。

サブフォームの作成方法
  1. フォームウィザードを使用して作成する
  2. サブフォームコントロールを配置して作成する

使い分けについて、①が初心者向き、②は慣れてきたら、といったイメージです。

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

こちらは手っ取り早くサブフォームを作る方法です。

【手順①】テーブル同士のリレーションシップを設定する

まずはサブフォームで表示するテーブル2つを、リレーションシップにより「1対多」の関係に設定します。

テーブル2つをリレーションシップで設定した様子

【手順②】リレーションシップ済みのテーブルを元にクエリを作成する

この2つのテーブルを元にクエリを作成します。ここではSQ_成績管理という名称にしました。

【手順④】フォームウィザードでサブフォームを作成する

メニュー:作成→フォームウィザードを実行すると、ダイアログが表示されますので、テーブル/クエリ欄に先ほど作成したクエリ(SQ_成績管理)を指定し、フォーム画面に表示する対象フィールドをすべて選択のうえ、[次へ]ボタンをクリックします。

リレーションシップ設定済テーブルを元にしたクエリを指定することで、Access側がどの箇所にどのフィールドを配置するかを自動判定してくれます。問題なければ[次へ]ボタンをクリックします。

自動判定が可能なのは、リレーションシップにより1対多の関係を明確にしているからです。ここが最大のポイントですね!

サブフォームへ配置するフィールドを自動判定

サブフォームのレイアウトを指定します。今回は[表形式]を選択します。

フォームの名前を付けます。今回は初期設定のままとし[完了]ボタンをクリックします。

サブフォームが作成されます。ただし、配置バランスや表示幅等の見た目が整っていないので、若干レイアウト調整をしましょう。

【手順④】レイアウト調整

こちらが調整後のサブフォームです。

このように、フォームウィザードを使えば、画面の指示に従い会話形式で、比較的簡易にサブフォームを作成することができます

サブフォームコントロールを配置して作成する

こちらはウィザードを使用せず、手作業でサブフォームを作成する方法です。

【手順①】親フォーム、子フォームをそれぞれ作成する

サブフォームでは、大元のフォームを親フォーム、サブフォーム側を子フォームと呼びます。それぞれについて、通常の手順でフォームを作成します。

【手順②】親フォームにサブフォームコントロールを配置する

メニュー:フォームデザインのアイコンから[サブフォーム/サブレポートコントロール]を選択肢、親フォームの余白部分に配置します。

コントロールを配置した段階で、サブフォームウィザードが起動するので、ウィザードを使ってもOKです。ここでは使わないパターンを説明します。

【手順③】子フォームのプロパティを設定する

配置したサブフォームコントロール(子フォーム)を右クリック→プロパティシートを表示し、次のプロパティを設定します。

  • ソースオブジェクト…サブフォームコントロールに表示させるフォームを指定
  • リンク親フィールド…親と子を関連付ける親側のフィールドを指定
  • リンク子フィールド…親と子を関連付ける子側のフィールドを指定

本例では以下のように設定します。

  • ソースオブジェクト…F_成績管理
  • リンク親フィールド…出席番号
  • リンク子フィールド…出席番号

プロパティを設定後、フォームビューで表示します。

まとめ

サブフォームとは
 – 1つのフォーム(親フォーム)の中に、別のフォームまたはテーブル・クエリのデータを表示する仕組み
 – 親データを切り替えると、子データ(サブフォーム部)が自動で切り替わるようにできる

サブフォームが役立つ関係性
 – テーブル同士が「1対多 (one-to-many)」の関係である場合に特に有効
 – 例:生徒と成績、顧客と受注、部署と社員、見積と明細など

サブフォームの作成方法:2種類
 1. フォームウィザードを使用する方法
 2. サブフォームコントロールを配置して手動で作成する方法

タイトルとURLをコピーしました