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の操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。