You can read the values ββfrom the sheet into an array, sort it using code, and then add elements.
This code will do this using Quicksort:
Private Sub UserForm_Initialize() Dim varRange() As Variant Dim lngLastRow As Long Dim i As Long lngLastRow = Range("F:F").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row varRange = Range("F:F").Resize(lngLastRow).Cells subQuickSort varRange Me.ComboBox1.List = varRange End Sub Public Sub subQuickSort(var1 As Variant, _ Optional ByVal lngLowStart As Long = -1, _ Optional ByVal lngHighStart As Long = -1) Dim varPivot As Variant Dim lngLow As Long Dim lngHigh As Long lngLowStart = IIf(lngLowStart = -1, LBound(var1), lngLowStart) lngHighStart = IIf(lngHighStart = -1, UBound(var1), lngHighStart) lngLow = lngLowStart lngHigh = lngHighStart varPivot = var1((lngLowStart + lngHighStart) \ 2, 1) While (lngLow <= lngHigh) While (var1(lngLow, 1) < varPivot And lngLow < lngHighStart) lngLow = lngLow + 1 Wend While (varPivot < var1(lngHigh, 1) And lngHigh > lngLowStart) lngHigh = lngHigh - 1 Wend If (lngLow <= lngHigh) Then subSwap var1, lngLow, lngHigh lngLow = lngLow + 1 lngHigh = lngHigh - 1 End If Wend If (lngLowStart < lngHigh) Then subQuickSort var1, lngLowStart, lngHigh End If If (lngLow < lngHighStart) Then subQuickSort var1, lngLow, lngHighStart End If End Sub Private Sub subSwap(var As Variant, lngItem1 As Long, lngItem2 As Long) Dim varTemp As Variant varTemp = var(lngItem1, 1) var(lngItem1, 1) = var(lngItem2, 1) var(lngItem2, 1) = varTemp End Sub
source share