あるコンボボックスの値を参照してリストの内容を変化させるコンボボックスの作り方(ACCESS)

ホーム>あるコンボボックスの値を参照してリストの内容を変化させるコンボボックスの作り方(ACCESS)

この情報はお役に立ちましたか?よろしければ皆様にもお知らせください。

  このエントリーをはてなブックマークに追加 mixiチェック  

Microsoft Access2003において、あるコンボボックスに値を指定すると、その値を参照して、別のコンボボックスのリスト値を変化させる方法を解説します。

部署に営業を指定すると、営業に属している社員のみがコンボボックスのリストの値にセットされる、といったことを実現できます。
ここでは例として、部署とそれに属する社員を表示させる方法を示します。

テーブルを作る

3つのテーブルをつくる

まず、部署データを格納するテーブル「テーブル_部署」、人物データを格納するテーブル「テーブル_人物」、その2つのテーブルから作成した社員データを格納するテーブル「テーブル_社員」の3つのテーブルを作ります。

テーブル_部署

「テーブル_部署」のフィールド設定

フィールドは、オートナンバー型の「部署ID」(主キー)と、テキスト型の「部署名」の2つです。

「テーブル_部署」のレコード入力

テーブルを開き、部署名に「営業、総務、経理、-」とそれぞれ4つのレコードを入力しておきます。

テーブル_人物

「テーブル_人物」のフィールド設定

フィールドは、オートナンバー型の「人物ID」(主キー)と、テキスト型の「人物名」、数値型の「部署ID」の3つです。

「テーブル_人物」のレコード入力

テーブルを開き、人物名と所属する部署IDを適当に入力しておきます。

テーブル_社員

「テーブル_社員」のフィールド設定

フィールドは、オートナンバー型の「社員ID」(主キー)と、数値型の「部署ID」、数値型の「人物ID」の3つです。

入力フォーム用クエリをつくる

入力フォーム用にクエリをつくります。

「テーブル_社員」「テーブル_人物」「テーブル_部署」の3つを関連させたクエリ「クエリ_社員」をつくります。

入力フォーム用クエリ「クエリ_社員」設定

「テーブル_人物」の「人物ID」フィールドは「テーブル_社員」の「人物ID」フィールドに関連させます。

「テーブル_部署」の「部署ID」フィールドは「テーブル_社員」の「部署ID」フィールドに関連させます。

フィールドには、「テーブル_社員」の全フィールド、「テーブル_人物」の「人物名」フィールド、「テーブル_部署」の「部署名」フィールドを指定します。

入力フォームをつくる(単票の場合)

先ほどつくった「クエリ_社員」をソースとしたフォームを作成します。

全コントロールをフォーム上に貼り付けます。

名前を「フォーム」にします。

コンボボックス用クエリの作成

後でつくる「人物ID」コンボボックスに設定するためのクエリをつくります。

「テーブル_人物」と「テーブル_部署」から成る選択クエリをつくります。両者の「部署ID」を関連させます。

フィールドには、「人物ID」「人物名」「部署ID」を指定します。

コンボボックス用のクエリ「クエリ」設定

「部署ID」フィールドの[抽出条件]に、以下のように[Forms]![フォーム]![部署ID]と入力します。

「クエリ」の抽出条件

クエリ名を「クエリ」にして保存します。

コンボボックスの作成

部署選択コンボボックス

「部署ID」コントロールを、右クリック->[コントロールの種類の変更]->[コンボボックス]を指定して、コンボボックスに変更します。

さらに「部署ID」コントロールを、右クリック->[プロパティ]で、プロパティを表示させます。

[データ]タブの[値集合ソース]を[テーブル_部署]にします。

「部署ID」の値集合ソース設定

[書式]タブの[列数]を2に、[列幅]を1;3と入力し、[リスト幅]を4にします(確定するとcmが自動的に挿入されます)。

「部署ID」の列数、列幅、リスト幅設定

人物選択コンボボックス

「人物ID」コントロールを、右クリック->[コントロールの種類の変更]->[コンボボックス]を指定して、コンボボックスに変更します。

さらに、「人物ID」コントロールを、右クリック->[プロパティ]で、プロパティを表示させます。

[データ]タブの[値集合ソース]を[クエリ]に指定します。

「人物ID」の値集合ソースを「クエリ」に指定

[書式]タブの[列数]を2に、[列幅]を1;3に、[リスト幅]を4にします(確定するとcmが自動的に挿入されます)。

「人物ID」の列数、列幅、リスト幅設定

以下のようなフォームになります。

「フォーム」の全容

このフォームを実行すると、以下のように、選択した部署に所属する人物のみが人物のコンボボックスに表示されるようになります。

「フォーム」の実行画面

入力フォームをつくる(帳票の場合)

帳票フォームとは、複数レコードを一度に表示するフォームのことです。帳票フォームで同様のことをする場合には、VBAが必要になります。

「クエリ_社員」をソースとしたフォームを作成します。

全コントロールをフォーム上に貼り付けます。

名前を「フォーム_帳票」にします。

コンボボックス用クエリの作成

後でつくる「人物ID」コンボボックスに設定するためのクエリをつくります。

「テーブル_人物」と「テーブル_部署」から成る選択クエリをつくります。両者の「部署ID」を関連させます。

フィールドには、「人物ID」「人物名」「部署ID」を指定します。

コンボボックス用クエリ「クエリ_帳票」の作成

「部署ID」フィールドの[抽出条件]に、以下のように[Forms]![フォーム_帳票]![部署ID]と入力します。

クエリ_帳票の抽出条件

クエリ名を「クエリ_帳票」にして保存します。

コンボボックスの作成

部署選択コンボボックス

「部署選択コンボボックス」の作成は、単票フォームのときと同じです。

人物選択コンボボックス

「人物選択コンボボックス」の作成は、単票フォームのときとほぼ同じです。

ただし、[データ]タブの[値集合ソース]に指定するのは「クエリ_帳票」です。

クエリ_帳票の人物IDの値集合ソース

さらに、[イベント]タブで[フォーカス取得時]に[イベントプロシージャ]を指定します。

クエリ_帳票のフォーカス取得時のイベントプロシージャ

右側に表示されるボタンをクリックして、コード入力画面が開いたら、以下のように「Me.人物ID.Requery」と入力します。

クエリ_帳票に設定したイベントプロシージャのコード

帳票フォームの場合は、このように再クエリさせないと、別のレコードに移動しても、前の部署コンボボックスを参照した値が、人物コンボボックスにセットされたままになってしまいます。

後は、フォームを整形すると、以下のようなフォームになります。

クエリ_帳票の設計画面

実行すると以下のようになります。

クエリ_帳票の実行画面

関連リンク

よく読まれている記事

UpDate:2011-8-26