ACCESS VBA 2つのコンボボックスを連動させる方法(VBAコード公開)

2つのコンボボックスを連動させる方法

ACCESSのフォームで、複数のコンボボックスがある際に、最初のコンボボックスの入力値に応じて、2つ目のコンボボックスのリストの値を変更したい場合があります。
例えば、売上入力画面で担当者を選択すると、その担当者が担当する顧客のみがコンボボックスに表示されるような形です。

これが実装できると入力効率が格段に上がります。
今回は、2つのコンボボックスを連動させる方法をご紹介します。


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

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。

ACCESSで作成したフォーム(完成形)

まずは完成形をお見せしましょう。
下記のフォームには担当と顧客の2つのコンボボックスがあります。

まず左側の担当コンボボックスはこんな選択肢です。

一方、右の顧客コンボボックスはこのような形です。

ここで、左側の担当コンボボックスで、よしださんを選択します。

すると、右側の顧客コンボボックスのリストが、よしださんが担当する顧客のみに絞られました。
この機能を使えば、顧客数が増えても効率的な入力が可能です。

フォームの作成

では、実装方法をご紹介していきます。

今回使用するテーブルは以下の2つです。

MST_担当

MST_顧客

上記の2つのテーブルを元にした、2つのコンボボックスを作成します。
テスト用に非連結のコントロールにしていますが、実際に作成される場合はフォームのレコードソースとなるテーブルやクエリのフィールドに紐づけて構いません。

最初にコンボボックスの作成方法です。

フォーム上に通常通りテキストボックスを作成した後、作成したテキストボックスを右クリックし、コントロールの種類の変更からコンボボックスを選択します。

これでコンボボックスが作れました。
ただ、これだけですとリストに何も表示されませんので、プロパティシートで値集合ソースを設定します。

プロパティシートのデータタブで値集合ソースを設定します。
今回は、MST_担当テーブルの値を表示させますので、MST_担当を設定します。

また、コンボボックスの表示形式を修正するため、プロパティシートの書式タブも操作しましょう。

MST_担当は1列目が担当ID、2列目が担当者名です。
1列目の担当IDがプルダウンに表示されても誰だかわかりませんので、2列目をプルダウンに表示したいと思います。
そのため、列数を2として2列目の担当者名まで表示させるようにし、列幅を0cm;3cmとすることで、1列目の担当IDを表示させないようにします。

ここまでの設定で担当側のコンボボックスは完成しますので、同様に顧客側のコンボボックスも作成します。
これでフォーム自体は完成です。

が、この状態ではコンボボックス同士が連動せず単体で動作するので、ここから連動させます。

VBAプログラミング

それでは、VBAのプログラミングで、2つのコンボボックスを連動させていきましょう。

今回は、担当を選択すると、担当する顧客のみがプルダウンに表示されるようにします。
そのため、担当IDのコンボボックスの更新後処理にイベントプロシージャを設定します。

設定するVBAのコードは以下の通りです。


 Private Sub 担当ID_AfterUpdate()

    Me!顧客ID.RowSource = "select * from MST_顧客 where 担当ID = " & [Forms]![T_コンボボックス]![担当ID]
    
 End Sub
 

フォームの顧客IDのRowSource(値集合ソース)をSQL文を使って更新する処理になっています。

SQL文ではwhere句で


 担当ID = " & [Forms]![T_コンボボックス]![担当ID]
 

を指定しています。
これは、担当IDがフォームで選択された値と合致するレコードだけを抽出する、という指示です。

今回は単純にwhere句で抽出しただけですが、OrderBy句で並び順を変更するなど、工夫を加えることも可能です。
こちらを設定して、フォームビューで動作を見てみましょう。

無事に、選択された担当の値に紐づいた顧客のみが表示されるようになりました。

以上、2つのコンボボックスを連動させる方法をご紹介しました。


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

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

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

サービス一覧

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