- ベストアンサー
アクセスのリストボックスについて
リストボックスを2つ使い、片方で選択した内容に応じて もう片方に表示される内容を変えたいのですが。 ご教授願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば、リストボックス1(リスト1)で取引先を選択し、選択した取引先が扱う商品をテーブル「商品マスタ」から検索してリストボックス2(リスト2)の値集合ソースにする場合の例です。テーブル「商品マスタ」は「商品」と「得意先」というフィールドを持っているとします。 リストボックスがおいてあるフォームに次のコードを追加してください。 Private Sub リスト1_BeforeUpdate(Cancel As Integer) リスト2.RowSource = "SELECT 商品 FROM 商品マスタ WHERE 得意先='" & リスト1.Value & "'" End Sub あとは、リスト2のプロパティで値集合タイプは「テーブル/クエリ」を選択するだけです。 アクセスではよくあるパターンだと思い勝手に例えを作ったのですが、まるであてはまらないようでしたらすみません。 ただ、基本的には上のコード内のSQLを書き換えるだけでたいていのケースは大丈夫だと思うのですが。 もしリストボックスの値集合にテーブルやクエリを使っていないなら、先に解答された方のコードを参照されれば良いかと思いますが、データ量が多いようでしたら、リストボックス用にテーブルやクエリを作ったほうが楽でしょうね。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
解答が少ないようなので解答を上げます。初歩的なやり方 ですので、ご存知でしたらごめんなさい。 リストボックスのアイテムの数が少ない時の例ですが。 エクセルのVBAでテストしたもんですから、 Worksheets("sheet1")の部分はForm1とかUserForm1とかの Objectに変えて下さい。項目が多くなるとDBとSQLとリストボックス連動出来ればと思いますが、取りあえず。 リストボックスをForm1等に2つに貼りつけて下さい。 Moduleに Sub test01() For i = 0 To Worksheets("sheet1").ListBox2.ListCount - 1 Worksheets("sheet1").ListBox2.RemoveItem 0 Next i '---- a = Array("東京", "神奈川", "埼玉", "千葉", "群馬", "栃木") For i = 0 To Ubound(a) Worksheets("sheet1").ListBox2.AddItem a(i) Next i End Sub リストボックスのイベントプロシージャーに Private Sub ListBox2_Click() Dim b1(5),b2(5),b3(5),b4(5),b5(5),b6(5) As String b1 = Array("中央区", "武蔵野市", "三鷹市") b2 = Array("横浜市", "藤沢市", "相模原市", "平塚市") b3 = Array("さいたま市", "川口市", "朝霞市", "和光市") b4 = Array("千葉市", "船橋市", "浦安市", "習志野市") ' MsgBox ListBox2.List(ListBox2.ListIndex) a = ListBox2.ListIndex ' MsgBox a For j = 1 To ListBox1.ListCount ListBox1.RemoveItem 0 Next j '----- Select Case a Case "0" 'MsgBox "東京" For j = 0 To UBound(b1) ListBox1.AddItem b1(j) Next j Case "1" 'MsgBox "神奈川" For j = 0 To UBound(b2) ListBox1.AddItem b2(j) Next j Case "2" 'MsgBox "埼玉" For j = 0 To UBound(b3) ListBox1.AddItem b3(j) Next j Case "3" 'MsgBox "千葉" For j = 0 To UBound(b4) ListBox1.AddItem b4(j) Next j Case "4" MsgBox "群馬" Case "5" MsgBox "栃木" End Select End Sub 群馬、栃木は手を抜いています。
お礼
リスト項目は多くなりそうなのでBraveさんの方法にしようと思います。 勉強になりました。ありがとうございました。
お礼
まさにそのような使い方をしようとしていました。 VBAについてもうすこし勉強しようと思います。ありがとうございました。