Option Explicit
Private dic As Object
Private Sub Worksheet_Activate()
Dim a, i As Long
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = 1
a = [d1].CurrentRegion.Value
For i = 2 To UBound(a, 1)
a(i, 1) = CStr(a(i, 1)): a(i, 2) = CStr(a(i, 2))
If Not dic.exists(a(i, 1)) Then
Set dic(a(i, 1)) = CreateObject("Scripting.Dictionary")
dic(a(i, 1)).CompareMode = 1
End If
dic(a(i, 1))(a(i, 2)) = Empty
Next
Me.ComboBox1.List = dic.keys
End Sub
Private Sub ComboBox1_Change()
Me.ComboBox2.Clear
If Me.ComboBox1.ListIndex > -1 Then Me.ComboBox2.List = dic(Me.ComboBox1.Value).keys
End Sub