Excel VBA で「カー家計簿」コンボボックス
コンボボックスを使ったデータ選択の方法
コンボボックスを配置する(分類マスタ)
1 2 3 4 5 6 7 8 9 |
Private Sub Cmb_Bunrui_Proc() Dim i As Integer Cmb_Bunrui.Clear For i = 5 To 999 If Len(Worksheets("Mst").Cells(2, i)) = 0 Then Exit For Cmb_Bunrui.AddItem (Worksheets("Mst").Cells(2, i)) Next End Sub |
ワークシート「Mst」の2行目・5列目から列(カラム)方向に分類名称を登録します。未登録セル(=セルの文字の長さがゼロ(=Len))までループ(For To Next)させます。セルに存在する名称をコンボボックスに表示します。(AddItem)
コンボボックスを配置する(項目マスタ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Private Sub Cmb_Komok_Proc() Dim W_i_Name As String Dim i As Integer, k As Integer Dim Wk_TLine As Long W_i_Name = Cmb_Bunrui.Value For i = 5 To 999 If Worksheets("Mst").Cells(2, i) = W_i_Name Then Cmb_Komok.Value = Worksheets("Mst").Cells(3, i).Value Wk_TLine = Worksheets("Mst").Cells(Rows.Count, i).End(xlUp).Row End If Next Cmb_Komok.Clear For k = 3 To Wk_TLine If Len(Worksheets("Mst").Cells(k, i)) = 0 Then Exit For Cmb_Komok.AddItem (Worksheets("Mst").Cells(k, i)) Next End Sub |
分類コンボボックスの値を変数(w_i_Name)にセットします。2行目・5列目から列(カラム)方向に変数(w_i_Name)に一致するセルを検索します。未登録セル(=セルの文字の長さがゼロ(=Len))までループ(For To Next)します。一致するセルの最終行(End(xlup)).Rowを取得し変数(wk_TLine)にセットします。
次にi列のセルに存在する名称を項目コンボボックスに表示します。(AddItem)
分類コンボボックスが列(横)の配置に対し項目コンボボックスが行(縦)の配置になります。縦横の2次元配列になっています。
コンボボックスを紐付ける(分類⇒項目)
図にすると以下のようになっています。分類のコンボボックスで選択された内容に紐ついた項目をコンボボックスに表示させます。
まとめ
・分類を横、項目を縦とした2次元の表をワークシート「Mst」に展開します。
・分類コンボボックスでは列(横)に展開して名称を表示させます(AddItem)。
・項目コンボボックスでは分類コンボボックスの値を取得して列(横)を確定させ、その列の最終行を取得します。(End(xlup).Row)
・分類コンボボックスで確定した列(横)の行(縦)の最終行まで展開して名称を表示させます(AddItem)。
・他にも方法は考えられますが今回はワークシート「Mst」に縦横2次元のテーブルを利用して展開する方法をとってみました。