Поместите следующий код в модуль userform и добавьте Microsoft Scripting Runtime к своим ссылкам.
Option Explicit
' Add Microsoft Scripting Runtime via Tools References
Const DELIM = ","
Dim dict As Scripting.Dictionary
Private Sub ComboPerson_Change()
Dim vDat As Variant
vDat = dict(ComboPerson.Value)
ComboDestination.Value = ""
vDat = Split(vDat, DELIM)
ComboDestination.List = vDat
End Sub
Private Sub UserForm_Initialize()
Dim ws As Worksheet
' Change to your sheet
' Set ws = Sheet3
Set ws = ThisWorkbook.Sheets("Sheet1")
Set dict = New Dictionary
Dim vDat As Variant
With ws
vDat = .Range("A2", .Range("B" & .Rows.Count).End(xlUp)).Value2
End With
' This will build the list of unique names and add
' a comma separated string of their favourite destination
' ATTENTION: comma in the destination is therefore a bad idea or replace
' the Const DELIM with a unique delimiter
Dim i As Long
For i = LBound(vDat, 1) To UBound(vDat, 1)
If dict.Exists(vDat(i, 1)) Then
dict(vDat(i, 1)) = dict(vDat(i, 1)) & DELIM & vDat(i, 2)
Else
dict.Add vDat(i, 1), vDat(i, 2)
End If
Next i
ComboPerson.List = dict.Keys
End Sub
Я назвал поле со списком для имени человека comboPerson
и имя для поля со списком его любимых назначение comboDestination
Дальнейшее чтение для топи c Словарь