Accessでサブフォームを組み込んだフォームを作成する方法

単票形式のメインフォームの中に、表形式のサブフォームを組み込んだフォームの作成方法について説明します。

今回は、
個人単位の情報「氏名、年齢」を元データとする単票形式のメインフォームを作成し、そのフォームの中に、成績「科目、点数」を元データとする表形式のサブフォームを組み込みます。

最終的に出来上がるフォームは、下記のようなものです。

<メインフォームとサブフォームに分けた方が良い例>

メインフォーム サブフォーム
個人情報(氏名、学年、性別、生年月日、…) 成績情報(科目、点数、評価….)

企業情報(企業名、住所、電話番号、….) 取引履歴(取引先企業名、取引日、取引商品名、取引個数、…)
銀行情報(銀行名..) 取引履歴(取引日、入金額、出金額…)
 …

このように、メインフォームの情報が「1個」に対して、「複数」の情報が対応するようなものをサブフォームとして取り扱います。

なぜ、こんなことをするのでしょうか?

仮に、サブフォーム側の1つ1つの情報に、メインフォーム側の情報を1つずつくっつけると、メインフォーム側の情報に重複が生じ無駄が生じますし、フォーム上も見づらくなります。

そこで、重複がないようにメインデータをまとめ、メインデータに「固有ID」を付加し、サブデータには、その「固有ID」だけを持たせることでメインデータと連結(リンク)します。

これによって、サブデータ側には、「固有ID」だけが重複しますが「固有ID」1つの項目の重複だけで済むのでデータ量の無駄を抑えることができます。

<具体的な作成手順>

それでは、ここから作成手順を説明します。
ぜひ、順を追って実際に作成してみてください。

なお、本記事の最後にサンプルのmdbをダウンロードできるようにしましたので、検証用に使ったり、加工してご自分の作りたいシステムに変更するなどしてご利用ください。

************************************************************************************

Accessを起動し、新規作成アイコンをクリックします。

「空のデータベース」をクリックします。

任意のデータベース名(ここでは、「テスト」としました)を入力して「作成」ボタンをクリックします

オブジェクト欄で「テーブル」を選択し「デザインビューでテーブルを作成する」を選択した状態で、「デザイン」をクリックします。

テーブルのフィールド名とデータ型を下記のように設定します。

「個人ID」の行を選択して、「鍵マーク」のアイコンをクリックします。

これで、「個人ID」という項目が主キー(重複が許されない)になります。

右上の✖︎ボタンをクリックすると、下のようなダイアログが表示されるので、テーブル名(ここでは、「T_個人」としました)を入力して「OK」ボタンをクリックします。

下記のように「T_個人」というテーブルが作成されます。

同じ要領で、下記のように「T_科目」というテーブルを作成します。


さらに、もう一つ「T_成績」というテーブルも作成します。


3つのテーブルが作成されていることを確認します。


「T_個人」をダブルクリックして、テーブルを開き、下記のようにデータを入力します。


同じように、「T_成績」テーブルについても、下記のようにデータを入力します。


最後に、「T_科目」テーブルに下記のようにデータを入力します。


下記のように、赤枠で囲んだ「リレーションシップ」のアイコンをクリックします。


下記のようなダイアログが表示されるので、「T_個人」を選択して、「追加」をクリックし、次に「T_成績」を選択して「追加」をクリック、最後に「T_科目」を選択して「追加」をクリックして「閉じる」をクリックします。


すると、リーレーションシップの画面に3つのテーブルが表示されます。


「T_個人」の「個人ID」の上にマウスをのせ、左クリックボタンを押したまま、「T_成績」の「個人ID」の場所までドラッグし、ドロップします。

すると、下記のような画面が表示されますので、「参照整合性」にチェックを入れ「結合の種類」をクリックします。


下記のダイアログが表示されたら、「T_成績」の全レコードと「T_個人」の同じ結合フィールドだけを含める。を選択して、「OK」ボタンをクリックします。

「作成」ボタンをクリックします。


すると、下記のように「T_個人」の個人IDと「T_成績」の個人IDが関連付け(リレーション)されます。T_個人の方に「1」、T_成績の方に「∞」とあるのは、T_個人のテーブルの個人IDは、重複がない(一つの番号は、一つしかない)ことを示し、T_成績テーブルの個人IDは、重複がある(一つの番号が2つ以上あり得る)ことを示しています。


同じように、「T_成績」の「科目ID」をクリックして、「T_科目」の「科目ID」までドラッグしてドロップします。すると、下記のようなダイアログが表示されるので、「参照整合性」にチェックを入れて、「結合の種類」をクリックします。


「T_成績」の全レコードと「T_科目」の同じ結合フィールドのレコードだけを含めるを選択して、「OK」ボタンをクリックします。


「作成」をクリックします。


下記のようにリレーションシップが作成されます。


上の画面の右上の✖︎ボタンをクリックすると、下のダイアログが表示されるので「はい」をクリックします。


次に、クエリを作成します。

オブジェクト欄で「クエリ」を選択し、「デザインビューでクエリを作成する」を選択した状態で「デザイン」をクリックします。


下記のダイアログが表示されるので、「T_個人」を選択して、「追加」をクリックします。


下記の画面が表示されるので、矢印のように、各項目をドラッグアンドドロップします。


上の画面の✖︎ボタンををクリックすると、下記のダイアログが表示されるので「はい」をクリックします。


下のダイアログが表示されたら、クエリ名(ここでは、Q_個人としました)を入力して「OK」をクリックします。


すると、下記のようにQ_個人という名前のクエリが作成されます。

同じように、オブジェクト欄で「クエリ」を選択し、「デザインビューでクエリを作成する」を選択した状態で「デザイン」をクリックします。

すると、下記のようなダイアログが表示されます。

まず「T_成績」を選択して「追加」をクリックします。

次に、「T_科目」を選択して「追加」をクリックします。

最後に、「閉じる」をクリックします。


下記の赤矢印のように、各項目をドラッグアンドドロップします。

注意:ここで、科目IDについては、「T_成績」の科目ID(重複あり)の方をクエリでは使います。「リレーション項目については、多側(∞側)を使う。」と覚えておきましょう。ここで、1側(重複なし側)を使うとエラーが発生します。


上記の✖︎ボタンをクリックすると、下記ダイアログが表示されるので「はい」をクリックします。


任意のクエリ名(ここでは、「Q_成績」としました)を入力して「OK」をクリックします。


すると、「Q_成績」が作成されます。


次に、フォームを作成します。

オブジェクト欄で「フォーム」を選択して「新規作成」をクリックします。


「オートフォーム:表形式」を選択して、基になるテーブルまたはクエリの選択欄に先ほど作成した「Q_成績」を選択して、「OK」をクリックします。


すると、下記のような表形式のフォームが作成されます。


上記のフォームの✖︎ボタンをクリックすると、下記のダイアログが表示されるので「はい」をクリックします。


任意のフォーム名(ここでは、F_成績とした)を入力して「OK」をクリックします。


下記のようにF_成績というフォームが作成されます。


次に、個人の単票形式のフォームを作成します。

オブジェクト欄で「フォーム」を選択し、「デザインビューでフォームを作成」が選択された状態で「新規作成」をクリックします。

「オートフォーム:単票形式」を選択、「Q_個人」を選択し「OK」をクリックします。


下記のような単票フォームが表示されます。


✖︎ボタンをクリックスロと、下記ダイアログが表示されるので「はい」をクリックします。


任意のフォーム名(ここでは、「F_個人」とした)を入力して「OK」をクリックします。


F_個人というフォームが作成されます


作成された単票形式のフォーム「F_個人」に、表形式のフォームを組み込みます。

オブジェクト欄「フォーム」を選択、F_個人を選択した状態で「デザイン」をクリックします。


下記のように、「F_個人」フォームが、編集画面で表示されます。

この単票フォームに「F_成績」フォームを配置するので、配置する場所を作るために、赤矢印のようにマウスでトラッグアンドドロップして、余白を広げます。


余白が広がると下のようになります。


サブフォームのアイコンをクリックして、先ほど作成した余白部分でもう一度クリックします。


サブフォームウィザードが表示されるので、「既存のフォームを使用する」を選択して、「F_成績」を選択し、次へをクリックします。


「一覧から選択する」を選択し、「個人IDでリンクし、Q_個人の各レコードに対しQ_成績を表示する」を選択して、「次へ」をクリックする。


任意のサブフォーム名を入力して「完了」をクリックする。


下記のように、「F_成績」フォームが組み込まれます。

縦横の幅などは、ドラッグアンドドロップで調整します。


上記画面の✖︎ボタンをクリックすると、下記ダイアログが表示されるので「はい」をクリックします。


「F_個人」をダブルクリックします。


組み込み後のフォームが表示されます。赤枠部分の移動ボタンを押すと、個人データが切り替わります。

また、サブフォーム「F_成績」の部分は、データ修正とデータ追加を行うことができます。

データ追加は、表の一番下の空白行に入力するのですが、「科目ID、科目、点数」のいずれかを入力すると、「個人ID」が自動的に入力されます。入力される値は、メインフォーム「F_個人」の個人IDと同じ値です。


上記で説明したように、サブフォーム「F_成績」の「個人ID」は、自動的に入力されるので、フォーム上に表示させる必要がない。

そこで、個人IDを非表示にする設定について説明します。

修正するのは、サブフォームなので、「F_成績」をデザインで開きます。


開いたら、「個人ID」の部分をクリックして、右クリックし、「プロパティ」を選択します。


プロパティの「可視」のところを「いいえ」に設定します。


ラベルも必要なくなるので、「個人ID」のラベルを選択して削除します。


✖︎ボタンをクリックして、保存します。


「F_成績」をダブルクリックします。


下記のように「個人ID」が表示されないのがわかります。


メインフォーム「F_個人」をダブルクリックします。


メインフォーム内のサブフォームでも「個人ID」が消えていることがわかります。

<この記事で紹介したmdbファイルのダウンロード>

このサンプルを応用して、ご自分の必要なデータベース作成にお役立てください。