ACCESS サブフォームの作成方法

サブフォームの作成方法

ACCESSでフォームを作っていると、一つのフォームでは表現できない、でも画面は一緒に見せたい、というときがあります。
そんな時に役立つのがサブフォームです。

今回は、サブフォームの作成方法や使い方をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。

サブフォームとは

サブフォームとは、フォームの中に更にフォームを作る機能です。

例えば、以下のサンプルでは、赤枠で囲った部分がサブフォームになっています。
メインフォームは単票形式(1レコードを画面に表示する)の売上伝票情報であり、サブフォームは帳票形式(複数のレコードを表の形で表示する)で売上伝票に紐づく、売上明細の情報を入力しています。

ACCESSはリレーショナルナルデータベースなので、1つのレコードに別の複数のレコードを紐づけてデータを管理します。

上記の例でいうと売上伝票1レコードに対して、売上明細は複数のレコードが紐づきます。

これを画面上で表現するためのものがサブフォームなのです。

上記のフォームをデザインビューで見ると、このように別々のフォームから成り立っていることが分かります。

サブフォームはいつ使う?

サブフォームを利用するのは、一つの画面で複数のテーブルのデータを元にした情報を表示したい場合です。

例えば先ほどの売上伝票入力フォームでは、売上伝票1レコードに対して、売上明細は複数のレコードが存在します。
こうしたリレーショナルデータをそれぞれ別フォームで作成していたのでは、直感的に理解がしにくくなります。

元となるテーブルのデータ(今回は売上伝票)を単票形式で作成し、紐づくデータ(今回は売上明細)を帳票形式で作成してサブフォーム化させる手法は非常によく利用されます。

売上管理だけでなく顧客管理でも、1人の顧客に紐づくデータが複数ある場合(例えば購入履歴)は、サブフォームを使って表現することが可能です。

そして、単票形式のメインフォームと帳票形式のサブフォームを特定のキー値でつなぐことにとって、メインフォームで表示したレコードに紐づくデータのみをサブフォームに表示することができます。

メインフォームとサブフォームの関係をまとめると下記のようになります。

サブフォームの作成方法

それでは、サブフォームの作成方法をご説明します。
流れは以下の通りです。

1.メインフォーム、サブフォームをそれぞれ作成する
2.メインフォームにサブフォームを配置する
3.メインフォームとサブフォームをつなぐリンクフィールドを設定する

メインフォーム、サブフォームをそれぞれ作成する

最初にメインフォーム、サブフォームを作成します。

メインフォームの作成については特段考慮すべき点はありません。
サブフォームを作成する際はメインフォームとのリンクフィールドを持たせる点を注意するとよいでしょう。

後述しますが、メインフォームとサブフォームをつなぐためには、リンクフィールドが必要です。

例えば、先ほどの例ですと売上伝票(メインフォーム)と売上明細(サブフォーム)を売上IDを元につないでいます。
売上明細の中でも、メインフォームに表示された売上IDを持つ売上明細のみを表示しているのです。

このリンクフィールドは、主にメインフォームの主キーになります。
当然メインフォーム側にはあるのですが、サブフォーム側にもこのフィールドを入れておく必要があります。

今回は売上明細テーブルを元にしたサブフォームを、下記のように表形式で作成しました。

中央にグレーのコントロールで「売上ID」があるのが分かると思います。

ただ、この売上IDはサブフォーム側で表示する必要はありません。
サブフォームの全てのレコードで同じ値が表示されることになりますし、そもそもメインフォーム側で表示されている値だからです。

そのため、単にメインフォーム、サブフォームのリンク用に作成したこのコントロールには、プロパティシートで以下の設定をしておきます。

可視:いいえ

使用可能:いいえ
編集ロック:はい

タブストップ:いいえ

これらの設定を行うことでフォーム上で売上IDが見えないし触れない状態にすることができます。

メインフォームにサブフォームを配置する

次にメインフォームにサブフォームを配置します。

メインフォームをデザインビューで開き、上段のメニューからサブフォームを選択します。

すると、既存のフォームを使用するか確認するウィザードが表示されますので、先ほど作成したサブフォームを選択します。

メインフォームとサブフォームをつなぐリンクフィールドを設定する

最後に、メインフォームをサブフォームをつなぐリンクフィールドを設定します。

メインフォームに設置したサブフォームのプロパティシートで、リンク親フィールドとリンク子フィールドを設定します。
今回は売上IDですね。

こちらは、サブフォームを設置する際のウィザードの中でも設定することが可能です。

するとこんな感じでサブフォームが完成します。

以上、サブフォームの作成方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。