多段Combo(連動コンボボックス)の基本
Excel VBAで「コンボボックスを選ぶと次のコンボボックスの候補が変わる」ような 多段Combo(連動コンボボックス) を作ると、ユーザーが階層的に選択できる便利なフォームになります。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 多段Comboとは?
1つ目のコンボボックスで選んだ内容に応じて、2つ目のコンボボックスの候補が変わる仕組み。 - 用途:
- 「都道府県 → 市区町村」
- 「カテゴリ → 商品」
- 「部署 → 担当者」
- 流れ:
- UserFormに ComboBox1(親) と ComboBox2(子) を配置。
- フォーム初期化時に親コンボの候補を設定。
- 親コンボの選択イベントで子コンボの候補を切り替える。
テンプレ1:固定データで多段Combo
UserFormに ComboBox1(地域) と ComboBox2(都市) を配置。
Private Sub UserForm_Initialize()
' 親コンボに地域を設定
ComboBox1.AddItem "関東"
ComboBox1.AddItem "関西"
End Sub
Private Sub ComboBox1_Change()
ComboBox2.Clear
Select Case ComboBox1.Value
Case "関東"
ComboBox2.AddItem "東京"
ComboBox2.AddItem "横浜"
ComboBox2.AddItem "千葉"
Case "関西"
ComboBox2.AddItem "大阪"
ComboBox2.AddItem "京都"
ComboBox2.AddItem "神戸"
End Select
End Sub
VB- ポイント:
- 親コンボの選択に応じて子コンボの候補を切り替える。
Clearで前の候補を消してから新しい候補を追加。
テンプレ2:シートのマスタから多段Combo
シート「Master」に以下のようなデータがあると仮定:
| 地域 | 都市 |
|---|---|
| 関東 | 東京 |
| 関東 | 横浜 |
| 関西 | 大阪 |
| 関西 | 京都 |
UserFormに ComboBox1(地域) と ComboBox2(都市) を配置。
Private Sub UserForm_Initialize()
Dim ws As Worksheet: Set ws = Worksheets("Master")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim i As Long
' 地域をDictionaryに登録(重複排除)
For i = 2 To lastRow
If Not dict.exists(ws.Cells(i, 1).Value) Then
dict.Add ws.Cells(i, 1).Value, 1
End If
Next i
ComboBox1.Clear
ComboBox1.List = dict.Keys
End Sub
Private Sub ComboBox1_Change()
Dim ws As Worksheet: Set ws = Worksheets("Master")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
ComboBox2.Clear
Dim i As Long
For i = 2 To lastRow
If ws.Cells(i, 1).Value = ComboBox1.Value Then
ComboBox2.AddItem ws.Cells(i, 2).Value
End If
Next i
End Sub
VB- ポイント:
- マスタシートから候補を生成。
- Dictionaryで親候補を重複なく抽出。
- 親選択に応じて子候補を絞り込み。
テンプレ3:多段Comboをさらに拡張(3段階)
UserFormに ComboBox1(地域)、ComboBox2(都市)、ComboBox3(駅) を配置。
親 → 子 → 孫 のように連動させる。
Private Sub ComboBox2_Change()
ComboBox3.Clear
Select Case ComboBox2.Value
Case "東京"
ComboBox3.AddItem "新宿駅"
ComboBox3.AddItem "渋谷駅"
Case "大阪"
ComboBox3.AddItem "梅田駅"
ComboBox3.AddItem "難波駅"
End Select
End Sub
VB- ポイント:
- 2段目の選択に応じて3段目を切り替える。
- 多段階も同じ仕組みで拡張可能。
例題で練習
'例1:固定データで地域→都市の多段Combo
' → UserForm_Initialize と ComboBox1_Change にコードを記述
'例2:シートのマスタから地域→都市の多段Combo
' → UserForm_Initialize と ComboBox1_Change にコードを記述
'例3:地域→都市→駅の3段階Combo
' → ComboBox2_Change にコードを記述
VB初心者向けポイント
- Clearで候補をリセット → 前の選択肢を消してから新しい候補を追加。
- Select Caseで分岐 → 親の選択に応じて子候補を切り替える。
- Dictionaryで重複排除 → マスタから候補を生成するときに便利。
- 段階を増やすのも同じ仕組み → 2段でも3段でも応用可能。
👉 この「多段Comboテンプレ」を覚えておけば、Excel VBAで 階層的な選択フォーム(地域→都市→駅など) を簡単に作成できます。
