仕方なく配列のソートを実装する場合のサンプルです。配列をソートする関数などは VBA には残念ながら無く、このコードは他言語のマージソートを VBA に移植したものです。
他言語のMerge Sort
http://www.codecodex.com/wiki/Merge_sort
'マージソート
'配列の添字の最小値は0に限定します
Public Sub MergeSort(List() As String)
Dim min, max, max1, max2, size As Long
min = LBound(List)
max = UBound(List)
size = max - min + 1
If min <> 0 Then
'最小値は0に限定
Error 1
ElseIf max = -1 Then
'配列に要素が無い
Exit Sub
ElseIf size = 1 Then
'配列要素が1つ
Exit Sub
End If
max1 = Int(max / 2) '少数は切り捨て
max2 = max - max1 - 1
Dim List1() As String
ReDim List1(min To max1)
Dim List2() As String
ReDim List2(min To max2)
Dim idx, idx1, idx2 As Integer
idx1 = min
For idx = min To max1
List1(idx1) = List(idx)
idx1 = idx1 + 1
Next
idx2 = min
For idx = max1 + 1 To max
List2(idx2) = List(idx)
idx2 = idx2 + 1
Next
MergeSort List1
MergeSort List2
idx = min
idx1 = min
idx2 = min
Do While (idx1 <= max1 And idx2 <= max2)
If List1(idx1) <= List2(idx2) Then
List(idx) = List1(idx1)
idx = idx + 1
idx1 = idx1 + 1
Else
List(idx) = List2(idx2)
idx = idx + 1
idx2 = idx2 + 1
End If
Loop
Do While (idx1 <= max1)
List(idx) = List1(idx1)
idx = idx + 1
idx1 = idx1 + 1
Loop
Do While (idx2 <= max2)
List(idx) = List2(idx2)
idx = idx + 1
idx2 = idx2 + 1
Loop
Erase List1
Erase List2
End Sub