
【ACCESS コントロール】コンボボックス
コンボボックスとは
コンボボックスとは あらかじめ決まった値が
プルダウンで選択されるものです
コンボボックスを使えば入力するデータを制御できるので
開発者の予測しないデータの入力を防ぐことができ
また入力する人にとっても文字を入力せず
マウス操作だけで入力できる簡易さがあります
コンボボックスの使用例 2件
動画で解説
全 6分28秒のうち コンボボックスの説明は
54秒 ~ 2分40秒 です
① コンボボックスで選んだコード番号の社員の氏名・カナをテキストボックスに表示
動作の流れ
社員コードをコマンドボタンのプルダウンから選びます

選んだ社員コードの社員氏名 カナをテキストボックスに表示します

フォームに設置したコントロールの設定

コンボボックス
名前:cbo_code
値集合ソース:M_staff (社員マスタ)
値集合タイプ:テーブル/クエリ
連結列:1
テキストボックス(氏名)
名前:txt_name
テキストボックス(カナ)
名前:txt_kana
VBAコード
コンボボックス(cbo_code)更新後処理
Private Sub cbo_code_AfterUpdate()
If IsNull(Me.cbo_code) Then
MsgBox "コードをいれてください"
Me.cbo_code.SetFocus
Exit Sub
Else
Me.txt_name = DLookup("staff_name", "M_staff", "staff_code = " & Me.cbo_code)
Me.txt_kana = DLookup("staff_kana", "M_staff", "staff_code = " & Me.cbo_code)
End If
End Sub
If IsNull(Me.cbo_code) Then
MsgBox "コードをいれてください"
Me.cbo_code.SetFocus
Exit Sub
If 文で コマンドボックスに入力されたかどうか判断しています
入力されていなければ IsNull が True となり
その場合
「コードをいれてください」とメッセージが表示され
コンボボックスにフォーカスを移し処理を終わります
Else
Me.txt_name = DLookup("staff_name", "M_staff", "staff_code = " & Me.cbo_code)
Me.txt_kana = DLookup("staff_kana", "M_staff", "staff_code = " & Me.cbo_code)
End If
コンボボックスに入力されていれば
氏名 カナのテキストボックスに
DLookup 関数を使用してテーブルの値を表示しています
Dlookup 関数の構文
DLookup ( 値を返すフィールド , レコード セット , データ範囲を制限する文字列式 )
社員マスターテーブルから社員コードが3番の人の氏名を参照したいとき
DLookup ( “社員名” , “社員マスター” , “社員コード = 3” )
② ひとつめのコンボボックスで選んだ値によって ふたつめのコンボボックスの値を絞る
動作の流れ
ひとつ目のコンボボックスから 部署をえらびます

経理部署をえらんだら ふたつめには
経理部の部員の名前が抽出されて表示されます

よって 営業をえらんだら部員は営業部員に絞られます
フォームに設置したコントロールの設定

コンボボックス(部署)
名前:cbo_cusho
値集合ソース:M_busho
値集合タイプ:テーブル/クエリ
連結列:1
コンボボックス(部員)
名前:cbo_member
VBAコード
部署コマンドボタン更新後処理
Private Sub cbo_busho_AfterUpdate()
cbo_member = ""
With Me.cbo_member
.RowSourceType = "Table/Query"
.RowSource = "SELECT staff_name FROM M_staff WHERE busho_code = " & Me.cbo_busho
End With
End Sub
cbo_member = ""
部員コンボボックスの値を空にします
With Me.cbo_member
.RowSourceType = "Table/Query"
.RowSource = "SELECT staff_name FROM M_staff WHERE busho_code = " & Me.cbo_busho
End With
コンボボックス cbo_member について設定します
値集合タイプをテーブル/クエリにします
値集合ソースを SQL文で
M_staff(社員マスタ)から staff_name (氏名)を
WHERE 句で
M_staff の busho_code を コンボボックス部署(cbo_busho)の値で参照しています
まとめ
コンボボックスはリストボックスとよく似たコントロールです
それぞれの特性を理解し
使い分けることが必要です
リストボックスの記事