Here is one method, albeit less than elegant, that will always create a new, sorted, combobox list without duplicates.
This example uses column A as the column containing the raw data. If your column is not 'A', change the two "A" references to your column letter, i.e. "C", "M", etc. Also, if your combobox is not 'ComboBox1', change that reference in line 20 to your actual combobox name.
Then, copy the event handler to the userform's code module
Public curCell
Private Sub UserForm_Activate()
Dim i, j, LastRow
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
Range("IV:IV").EntireColumn.Hidden = True
Range("IV:IV").ClearContents
curCell = ActiveCell.Address(0, 0)
For i = 1 To LastRow
If Application.CountIf(Range("IV:IV"), Cells(i, "A").Value) = 0 Then
Range("IV" & Rows.Count).End(xlUp). Offset(1).Value = Cells(i, "A").Value
End If
Next
Columns("IV:IV").Select
Selection.Sort Key1:=Range("IV1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, dataOption1:=xlSortNormal
Range(curCell).Select
LastRowIV = Range("IV" & Rows.Count).End(xlUp).Row
For i = 1 To LastRowIV
Me.ComboBox1.AddItem Cells(i, "IV").Value
Next
End Sub
Alternatively, you can use this method. However, the list will be unsorted. It would be possible to dump the combobox list into an array, sort the array, and repopulate the list. Unfortunately, I am late for an appointment and have to end it here.
Private Sub UserForm_Activate()
Dim i, LastRow
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For i = 1 To LastRow
Me.ComboBox1.Text = Sheets("Sheet1").Cells(i, 1)
If Not Me.ComboBox1.MatchFound And Not Me.ComboBox1.Text = "" _
Then Me.ComboBox1.AddItem Me.ComboBox1.Text
Next
End Sub