ACCESS コンボボックスの絞り込みをする方法

コンボボックスの絞り込みをする方法

ACCESSのフォームでよく使うパーツがコンボボックスです。
別名プルダウンですね。

この、コンボボックスは便利なのですが、選択肢が多すぎるとコンボボックス内から選ぶのが大変だったりします。

そこで今回は、コンボボックスの絞り込みをする方法をご紹介します。


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

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

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文を使って更新する処理になっています。

MST_顧客テーブルから、担当IDが、T_コンボボックスフォームの担当IDと同じものだけを抽出してコンボボックスのプルダウンに表示させる、という意味のSQL文です。

SQL文ではwhere句で


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

を指定し、担当IDで選択された値を元に値集合ソースを抽出しています。
今回は単純にwhere句で抽出しただけですが、OrderBy句で並び順を変更するなど、工夫を加えることも可能です。

こちらを設定して、フォームビューで動作を見てみましょう。

担当を選択すると、その結果に基づいて選択された担当の値に紐づいた顧客のみが表示されるようになりました。

この機能を活用すればさらに選択した顧客に基づいて商品のプルダウンを絞り込むなど、入力を簡素化させることが可能です。
非常に便利な機能ですので上記のSQL文を書き換えて活用してください。

以上、コンボボックスの絞り込みをする方法をご紹介しました。


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

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

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

サービス一覧

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