I am trying to get unique country names along with any unique Fruits for this particular country (like the table below). I tried using a 2D array, but it got complicated.

The end result with the plan is to put the country in one combo box, which fills the 2nd combo box with Fruit when selected.

I saw someone recommend a dictionary in a dictionary, but it's hard for me to understand the concept. I tried several ways to set up a text dictionary, but I keep getting an error Argument Not Optionalor Object Required. Am I just getting the syntax wrong or is there a fundamental problem with what I'm trying to do?
Edit
, - , , , , . . :
Dim Arr As Variant
Dim rng1 As Range
Dim rng2 As Range
Dim newRng As Range
Dim name As String
Dim text As String
Dim j As Long
Dim i As Long
Dim dcName As Scripting.Dictionary
Set dcName = New Scripting.Dictionary
Set rng1 = tbl.ListColumns("Name1").DataBodyRange
Set rng2 = tbl.ListColumns("Name5 Text").DataBodyRange
Set newRng = Range(rng1, rng2)
Arr = newRng
For i = 1 To 10 Step 2
For j = LBound(Arr) To UBound(Arr)
name = Arr(j, i)
text = Arr(j, i + 1)
If name <> vbNullString Then
dcName(name) = dcName(name) & "|" & text
End If
Next j
Next i
ReDim arrSort(0 To dcName.Count - 1, 0 To 1)
For Key = 0 To dcName.Count - 1
arrSort(Key, 0) = dcName.Keys(Key)
arrSort(Key, 1) = dcName.Items(Key)
Next Key
For i = LBound(arrSort) To UBound(arrSort) - 1
For j = i + 1 To UBound(arrSort)
If UCase(arrSort(i, 0)) > UCase(arrSort(j, 0)) Then
tempName = arrSort(j, 0)
tempText = arrSort(j, 1)
arrSort(j, 0) = arrSort(i, 0)
arrSort(j, 1) = arrSort(i, 1)
arrSort(i, 0) = tempName
arrSort(i, 1) = tempText
End If
Next j
Next i
Me.cbName.List = arrSort
. , , .
Private Sub cbName1_Change()
Dim i As Integer
Dim selName As String
Dim arrText As Variant
Me.cbName1Text.Clear
selIndex = Me.cbName1.ListIndex
text = arrSort(selIndex, 1)
arrText = Split(text, "|")
For i = LBound(arrText) To UBound(arrText)
If arrText(i) <> vbNullString Then
Me.cbName1Text.AddItem arrText(i)
End If
Next i
End Sub
Sub GetAbilities()
Dim Arr As Variant
Dim rng1 As Range
Dim rng2 As Range
Dim newRng As Range
Dim name As Variant
Dim text As Variant
Dim dcName As Scripting.Dictionary
Dim dcText As Scripting.Dictionary
Set dcName = New Scripting.Dictionary
Set dcText = New Scripting.Dictionary
Set rng1 = tbl.ListColumns("Name1").DataBodyRange
Set rng2 = tbl.ListColumns("Text3").DataBodyRange
Set newRng = Range(rng1, rng2)
Arr = newRng
counter = 0
For j = 1 To 10 Step 2
For i = LBound(Arr) To UBound(Arr)
name = Arr(i, j)
text = Arr(i, j + 1)
If dcName.Exists(name) Then
If Not dcText.Exists(text) Then
dcText.Add text, counter
End If
Else
Set dcText = CreateObject("Scripting.Dictionary")
dcName.Add name, dcText
If text <> vbNullString Then
dcText.Add text, counter
End If
End If
counter = counter + 1
Next i
Next j
For Each n In dcName.Keys
For Each t In dcName.item(n).Keys
Debug.Print n, t
Next t
Next n
End Sub