Private Sub BubbleSort(varArray As Variant, bAscending As Boolean) 'Option Base 0 is assumed Dim HoldEntry As Integer Dim SwapOccurred As Boolean Dim iItteration As Integer Dim i As Integer SwapOccurred = True iItteration = 1 Do Until Not SwapOccurred SwapOccurred = False For i = LBound(varArray) To UBound(varArray) - iItteration Step 1 If bAscending Then If varArray(i) > varArray(i + 1) Then HoldEntry = varArray(i) varArray(i) = varArray(i + 1) varArray(i + 1) = HoldEntry SwapOccurred = True End If Else If varArray(i + 1) > varArray(i) Then HoldEntry = varArray(i) varArray(i) = varArray(i + 1) varArray(i + 1) = HoldEntry SwapOccurred = True End If End If Next i iItteration = iItteration + 1 'reduce iteration each time as greatest/lowest 'item already at end/start of array Loop End Sub 'to call ....Private Sub cmdBubbleSort_Click() Dim lArray(999) As Long, iCnt As Integer 'populate array with dummy data For iCnt = LBound(lArray) To UBound(lArray) Step 1 lArray(iCnt) = Int((1000 * Rnd) + 1) Next iCnt Call BubbleSort(lArray, True) 'display result For iCnt = LBound(lArray) To UBound(lArray) Step 1 lstResult.AddItem lArray(iCnt) Next iCnt End Sub