ACCESS VBA 入力値に連動するリストボックス(VBAコード公開)

入力値に連動するリストボックス

ACCESSのフォームで、あるコントロールの入力値に応じて、別のリストボックスの値を変えたい場合があります。

例えば、売上入力画面で担当者を選択すると、その担当者が担当する顧客のみがリストボックスに表示されるような形です。
もしくは顧客名の一部を入力すると、その文字と一致する顧客のみがリストボックスに表示される、等。

これが実装できると入力効率が格段に上がります。
今回は、入力値に応じて変動するリストボックス機能をご紹介します。


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

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

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

まずは完成形です。
下記は売上の入力フォームですが、赤枠で囲った部分が今回の対象機能です。

顧客検索に入力した文字と一致する顧客名のみを、下段のリストボックスに表示します。
顧客検索の文字を変えると、下図のようにリストボックスの値も変わります。

このように検索機能で顧客を絞り込んだうえで、対象の顧客をリストボックスから選択します。
毎回、全顧客一覧から顧客を探すよりはかなり効率的に探すことができます。

フォームの作成

それでは、フォームの作成からご説明していきましょう。

今回利用するのは顧客検索と顧客IDのコントロールです。

顧客検索は非連結のテキストボックスです。
そして、顧客IDの方は顧客情報が入った顧客マスターテーブル(MST_顧客)を値集合ソースにしたリストボックスです。

顧客IDのプロパティはこのように設定してあります。

値集合ソースがMST_顧客となっています。
これがフォームに表示されるプルダウンのもととなるデータです。

今回はこの値集合ソースをフォームの顧客検索の値に応じて変更したいわけです。

なお、リストボックスの作成方法は、こちらの記事をご確認ください。

リストボックスの作り方

今回は、顧客検索に文字を入れて決定すると、その値に応じて顧客IDのリストボックスのレコードソースが変わるように設定します。
そのため顧客検索の更新後処理にイベントプロシージャを設定します。

VBAで設定したイベントプロシージャ

次に、顧客検索の更新後処理に設定するイベントプロシージャの内容を見ていきましょう。
比較的短いコードです。


 Private Sub 顧客名検索_AfterUpdate()

    Me!顧客ID.RowSource = "select * from MST_顧客 where 顧客名 like '*" & [Forms]![売上伝票入力]![顧客名検索] & "*' and 削除 = false ORDER BY 顧客名ふりがな ASC"
    
 End Sub
 

フォームの顧客IDのRowSource(値集合ソース)をSQL文を使って更新する処理になっています。
MST_顧客テーブルから指定した条件でレコードを抽出し、プルダウンのレコードソースとするわけです。

SQL文ではwhere句で


 顧客名 like '*" & [Forms]![売上伝票入力]![顧客名検索] & "*' and 削除 = false
 

を指定し、顧客検索に入力された文字の前後にアスタリスク(*)を付与することであいまい検索を可能にしています。
アスタリスクの前後にシングルクォーテーション(’)を付けているのは、フォームに入力された値をテキスト型のデータとして扱うためです。

最後の、


 ORDER BY 顧客名ふりがな ASC
 

は、リストボックスの値をフリガナ五十音順で並べたかったので記載しています。

この機能は結構便利で様々なフォームで使用できます。

今回はテキスト入力された値をあいまい検索してリストボックスの値集合ソースを変更させましたが、リストボックスで選択された値を元に、別のリストボックスの値集合ソースを変更することも可能です。

段階的に入力していくフォームでは入力効率を上げるために、この機能の活用を検討ください。

以上、入力値に連動するリストボックス機能の開発事例をご紹介しました。


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

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

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

サービス一覧

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