- ベストアンサー
同じコンボボックス、リストボックスを使うには?
- ユーザーフォームを使って製造計画表を作っています。コンボボックスで会社名、リストボックスで会社ごとの製品名を選択させるとこまで出来ました。同じ中身のコンボボックス、リストボックスを使って3つ作りたいと思っています。
- 2.3.のコンボボックスとリストボックスを1.のものと同じように作りたいのですが、コードをコピーして必要な修正を行ってもうまくいきません。
- 初心者のため、わかりにくい質問かもしれませんが、よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
回答が付いてないようなので。。 UserForm Initializeイベントで3つのComboBoxにLIstをセット ListBox1のChangeイベントが出来たら、それをコピーして、数値のところを、2,3に変えるだけです。 質問者のコードをそのまま使用するとして。。 '----- 3つのコンボにリストをセット-------- Private Sub UserForm_initialize() Dim ico As Long ico = 1 With ThisWorkbook.Worksheets("Sheet1") Do While .Cells(1, ico) <> "" Me.ComboBox1.AddItem .Cells(1, ico).Value ico = ico + 1 Loop End With Me.ComboBox2.List = Me.ComboBox1.List Me.ComboBox3.List = Me.ComboBox1.List Me.ComboBox1.SetFocus End Sub '----------ListBox1をセット---------------- Private Sub ComboBox1_Change() Dim ico As Long ico = Me.ComboBox1.ListIndex + 1 With ThisWorkbook.Worksheets("Sheet1") Me.ListBox1.List = .Range(.Cells(2, ico), _ .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value End With End Sub '----------ListBox2をセット---------------- Private Sub ComboBox2_Change() Dim ico As Long ico = Me.ComboBox2.ListIndex + 1 With ThisWorkbook.Worksheets("Sheet1") Me.ListBox2.List = .Range(.Cells(2, ico), _ .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value End With End Sub '----------ListBox3をセット---------------- Private Sub ComboBox3_Change() Dim ico As Long ico = Me.ComboBox3.ListIndex + 1 With ThisWorkbook.Worksheets("Sheet1") Me.ListBox3.List = .Range(.Cells(2, ico), _ .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value End With End Sub '-------------------------------------------- ただこれではCombo,ListBoxが増えたときにコピーや修正が大変ですので、LIstBoxへのセットは殆ど同じですから、そこをサブルーチンにしてやります。 方法はサブルーチンをコールするときにComboBoxの番号を引数としてコールしてやります。 '------------------------------- Private Sub ComboBox1_Change() Call ListBoxSet(1) End Sub '------------------------------- Private Sub ComboBox2_Change() Call ListBoxSet(2) End Sub '------------------------------- Private Sub ComboBox3_Change() Call ListBoxSet(3) End Sub '------共通ListBoxセット---------------- Private Sub ListBoxSet(No As Integer) Dim ico As Long ico = Me.Controls("ComboBox" & No).ListIndex + 1 With ThisWorkbook.Worksheets("Sheet1") Me.Controls("ListBox" & No).List = .Range(.Cells(2, ico), _ .Cells(.Cells(Rows.Count, ico).End(xlUp).Row, ico)).Value End With End Sub '-------------------------------------- 以上。
お礼
onlyromさん、ありがとうございました。自分の想像してた通りの物が作ることができました(^_^) とても助かりました。 お礼の返事がだいぶ遅れてしまってすいませんでした。