Option Explicit
Sub Shuffle()
Dim llSource1 As Long
Dim llSource2 As Long
Dim llDestination As Long
llSource1 = 2
llSource2 = 2
llDestination = 1
wsList.Columns(1).Sort wsList.Cells(1, 1), , , , , , , xlYes
wsList.Columns(3).Sort wsList.Cells(1, 3), , , , , , , xlYes
Do While Len(wsList.Cells(llSource1, 1).Value & wsList.Cells(llSource2, 3).Value) > 0
If Len(wsList.Cells(llSource1, 1).Value) = 0 Then
llDestination = AddValue(wsList.Cells(llSource2, 3).Value, llDestination)
llSource2 = llSource2 + 1
ElseIf Len(wsList.Cells(llSource2, 3).Value) = 0 Then
llDestination = AddValue(wsList.Cells(llSource1, 1).Value, llDestination)
llSource1 = llSource1 + 1
ElseIf wsList.Cells(llSource1, 1).Value < wsList.Cells(llSource2, 3).Value Then
llDestination = AddValue(wsList.Cells(llSource1, 1).Value, llDestination)
llSource1 = llSource1 + 1
ElseIf wsList.Cells(llSource1, 1).Value > wsList.Cells(llSource2, 3).Value Then
llDestination = AddValue(wsList.Cells(llSource2, 3).Value, llDestination)
llSource2 = llSource2 + 1
Else
llDestination = AddValue(wsList.Cells(llSource1, 1).Value, llDestination)
llSource1 = llSource1 + 1
llSource2 = llSource2 + 1
End If
Loop
End Sub
Private Function AddValue(Value As String, Row As Long) As Long
Dim llResult As Long
llResult = Row
If wsList.Cells(llResult, 2).Value <> Value Then
llResult = llResult + 1
wsList.Cells(llResult, 2).Value = Value
End If
AddValue = llResult
End Function