Windows 10 Pro_x64 + Excel2013_x86 VBA で ListBox 2個を連動させる
Windows 10 Pro_x64 + Excel2013_x86 VBA で ListBox 2個を連動させる
Excel VBA のUserForm上の2個のListBoxを連動する時のメモ
普段はデータベースからひらってきたデータを表示することが多いんだけど
最小限必要なコードを張りつけてみる
・UserFormを1個追加する
・UserForm2の上にListBoxを2個追加する
・UserForm_Initialize で ListBox1 に初期データを追加する
・ListBox1をダブルクリックしたときに、ListBox2に対応するデータを表示する
対象データは以下の全国一括(KEN_ALL.CSV)より一部抜粋
サンプルコード
Option Explicit Private Sub UserForm_Initialize() ' ListBox1.Clear ListBox1.ColumnWidths = "30 pt;40" ListBox1.ColumnCount = 2 ' ListBox1.AddItem "" ListBox1.List(0, 0) = "01" ListBox1.List(0, 1) = "北海道" ListBox1.AddItem "" ListBox1.List(1, 0) = "02" ListBox1.List(1, 1) = "青森県" ListBox1.AddItem "" ListBox1.List(2, 0) = "03" ListBox1.List(2, 1) = "岩手県" ' End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ' Dim strCode As String Dim strName As String ' If ListBox1.ListIndex >= 0 Then strCode = ListBox1.List(ListBox1.ListIndex, 0) strName = ListBox1.List(ListBox1.ListIndex, 1) ' Call SetPostal(strCode) ' Label1.Caption = Trim(strName) End If ' End Sub Private Sub SetPostal(ByRef aPrefCode As String) ' ListBox2.Clear ListBox2.ColumnWidths = "30 pt;40 pt;70 pt;70 pt" ListBox2.ColumnCount = 4 ' Select Case aPrefCode Case "01" ListBox2.AddItem "" ListBox2.List(0, 0) = "01101" ListBox2.List(0, 1) = "0640954" ListBox2.List(0, 2) = "札幌市中央区" ListBox2.List(0, 3) = "宮の森四条" ListBox2.AddItem "" ListBox2.List(1, 0) = "01102" ListBox2.List(1, 1) = "0028071" ListBox2.List(1, 2) = "札幌市北区" ListBox2.List(1, 3) = "あいの里一条" Case "02" ListBox2.AddItem "" ListBox2.List(0, 0) = "02201" ListBox2.List(0, 1) = "0301271" ListBox2.List(0, 2) = "青森市" ListBox2.List(0, 3) = "六枚橋" ListBox2.AddItem "" ListBox2.List(1, 0) = "02202" ListBox2.List(1, 1) = "0361516" ListBox2.List(1, 2) = "弘前市" ListBox2.List(1, 3) = "藍内" Case "03" ListBox2.AddItem "" ListBox2.List(0, 0) = "03201" ListBox2.List(0, 1) = "0200886" ListBox2.List(0, 2) = "盛岡市" ListBox2.List(0, 3) = "若園町" ListBox2.AddItem "" ListBox2.List(1, 0) = "03202" ListBox2.List(1, 1) = "0270202" ListBox2.List(1, 2) = "宮古市" ListBox2.List(1, 3) = "赤前" End Select ' End Sub Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ' Dim setVal1 As String Dim setVal2 As String Dim setVal3 As String Dim setVal4 As String ' If ListBox2.ListIndex >= 0 Then setVal1 = ListBox2.List(ListBox2.ListIndex, 0) setVal2 = ListBox2.List(ListBox2.ListIndex, 1) setVal3 = ListBox2.List(ListBox2.ListIndex, 2) setVal4 = ListBox2.List(ListBox2.ListIndex, 3) End If ' Debug.Print setVal1, setVal2, setVal3, setVal4 ' End Sub