2015-05-12 4 views
0

Я хочу получить уникальные значения в combobox 2 после выбора из combobox1.Уникальные значения в combobox в Excel VBA

Column A    Column B 
--------    -------- 
Girls     Hair 
Boys     Hair 
Veg     Water 
Non-Veg    Water 

Выделив Девушки в ComboBox1 (извлечь из колонки «A» в Excel), он должен показать уникальное значение «Hair» из столбца «B» вместо двух раз в первенствует.

+0

Колонка A \t Колонка B Девушки \t волос мальчиков \t волос Вег \t воды Non-Вег \t Вода –

+0

Существует только одно значение для девушки, почему вам нужно поместить его в поле со списком? – Davesexcel

+0

Это всего лишь пример. Я хочу добавить уникальные значения в combox2 из столбца «B», как только я выберу Girls из столбца «A» –

ответ

0

Вот основы для такого рода связан выбор:

Это будет реализовывать уникальные значения в ComboBox1:

Private Sub UserForm_Initialize() 
Dim Ws As Worksheet, _ 
    Dic As Object, _ 
    rCell As Range, _ 
    Key 'As String 

Set Ws = Worksheets("Sheet1") 
Set Dic = CreateObject("Scripting.Dictionary") 
UserForm1.ComboBox1.Clear 

For Each rCell In Ws.Range("A2", Ws.Cells(Rows.Count, "A").End(xlUp)) 
    If Not Dic.exists(LCase(rCell.Value)) Then 
     Dic.Add LCase(rCell.Value), Nothing 
    End If 
Next rCell 

For Each Key In Dic 
    UserForm1.ComboBox1.AddItem Key 
Next 
End Sub 

И есть та часть, которая поместить значения уников в ComboBox2, когда он соответствует критерии с ComboBox1:

'При изменении значенияComboBox1, он будет запускать этот код, так что вам нужно обновления в т здесь значения, предложенные вComboBox2 с вашими собственными тестами.

Private Sub ComboBox1_Change() 

Dim Ws As Worksheet, _ 
    Dic As Object, _ 
    rCell As Range, _ 
    Key 'As String 

Set Ws = Worksheets("Sheet1") 
Set Dic = CreateObject("Scripting.Dictionary") 
Me.ComboBox2.Clear 'Clear all previously added elements 
Me.ComboBox2.Value = vbNullString 'Set active value as an empty string 

'------Here is where you need to do your tests------- 
For Each rCell In Ws.Range("B2", Ws.Cells(Rows.Count, "B").End(xlUp)) 
    If rCell.Offset(0, -1) <> Me.ComboBox1.Value Then 
    Else 
     If Not Dic.exists(LCase(rCell.Value)) Then 
      Dic.Add LCase(rCell.Value), Nothing 
     End If 
    End If 
Next rCell 

For Each Key In Dic 
    UserForm1.ComboBox2.AddItem Key 
Next 
End Sub 

И код для третьего выпадающего списка:

Private Sub ComboBox2_Change() 

    Dim Ws As Worksheet, _ 
     Dic As Object, _ 
     rCell As Range, _ 
     Key 'As String 

    Set Ws = Worksheets("Sheet1") 
    Set Dic = CreateObject("Scripting.Dictionary") 
    Me.ComboBox3.Clear 'Clear all previously added elements 
    Me.ComboBox3.Value = vbNullString 'Set active value as an empty string 

    '------Here is where you need to do your tests------- 
    For Each rCell In Ws.Range("C2", Ws.Cells(Rows.Count, "C").End(xlUp)) 
     If rCell.Offset(0, -1) <> Me.ComboBox2.Value And rCell.Offset(0, -2) <> Me.ComboBox1.Value Then 
     Else 
      If Not Dic.exists(LCase(rCell.Value)) Then 
       Dic.Add LCase(rCell.Value), Nothing 
      End If 
     End If 
    Next rCell 

    For Each Key In Dic 
     UserForm1.ComboBox3.AddItem Key 
    Next 
    End Sub 
+0

Большое спасибо. Это действительно работает. Я хочу добавить уникальные значения в combobox3 из столбца «C» на основе выбора из combobox2. Какие все изменения мне нужны для реализации –

+0

Я заменил combobox1.value с combobox2.value и «B2» на «C» в приведенном выше коде, но он не работает. Пожалуйста помогите. –

+0

Пожалуйста, найдите время, чтобы прочитать эти ссылки, и войдите в SO дух: http://stackoverflow.com/help/asking и http://stackoverflow.com/help/dont-ask Для другого каскадного combobox просто возьмите код в 'ComboBox1_Change' и поместите его в' ComboBox2_Change' и переключите 'ComboBox2' на' ComboBox3' и 'ComboBox1' на' ComboBox2' и '" B2 "' на '" C2 "и" B "на' C «И это сработает. ** Но серьезно, прочитайте ссылки, которыми я поделился, особенно второй ** – R3uK

Смежные вопросы