If you wanted to do the whole thing (including the sort) in VBA without using a helper column this works:
Option Explicit
Option Base 1
Sub SortInVB()
Dim vSortArr As Variant
Dim lUpperBnd As Long
Dim n As Long
vSortArr = Range("A1:a6")
lUpperBnd = UBound(vSortArr)
ReDim Preserve vSortArr(1 To lUpperBnd, 1 To 2)
For n = 1 To lUpperBnd
If Left(vSortArr(n, 1), InStr(vSortArr(n, 1), ",")) = "" Then
vSortArr(n, 2) = vSortArr(n, 1)
Else
vSortArr(n, 2) = CLng(Left(vSortArr(n, 1), InStr(vSortArr(n, 1), ",") - 1))
End If
Next n
vSortArr = BubbleSort2d2cArray(vSortArr, 2)
ReDim Preserve vSortArr(1 To lUpperBnd, 1)
Range("a1:a6").Value = vSortArr
End Sub
Private Function BubbleSort2d2cArray(SortArray As Variant, _
Optional SortColumn As Long) As Variant
'Code was adapted from MSDN KB Article ID: 133135.
'Using a Visual Basic Macro to Sort Arrays in Microsoft Excel," found at:
'http://support.microsoft.com/kb/133135
Dim vTempArr(1 To 1, 1 To 2) As Variant
Dim bSwitch As Boolean
Dim lLowerBnd As Long
Dim lUpperBnd As Long
Dim i As Long
lLowerBnd = LBound(SortArray)
lUpperBnd = UBound(SortArray)
If SortColumn <> 2 Then SortColumn = 1
Do
bSwitch = False
For i = lLowerBnd To lUpperBnd - 1
If SortArray(i, SortColumn) > SortArray(i + 1, SortColumn) Then
bSwitch = True
vTempArr(1, 1) = SortArray(i, 1)
vTempArr(1, 2) = SortArray(i, 2)
SortArray(i, 1) = SortArray(i + 1, 1)
SortArray(i, 2) = SortArray(i + 1, 2)
SortArray(i + 1, 1) = vTempArr(1, 1)
SortArray(i + 1, 2) = vTempArr(1, 2)
End If
Next i
Loop While bSwitch
BubbleSort2d2cArray = SortArray
End Function
Regards,
Tom
Bookmarks