Excel を使っているので ソートは Excel の機能を使ってもよいのですが 他の言語でも使えるロジックなので整理しておきます
ソートを行う件数が少ない場合には 単純なソートを行えばよいのですが 件数が多い場合にはクイックソートが有効でしょう
クイックソートは再帰呼び出しが発生するので 起動する関数とは分ける必要があります
Dim SortData(99) As Long
QSort SortData, 0, 99
Private Sub QSort(ByRef l_arr() As Long, ByVal l_min As Long, ByVal l_max As Long)
Dim l_center As Long
Dim l_idx As Long
Dim l_set As Long
Dim l_compare As Long
Dim l_exchange As Long
If (l_min >= l_max) Then Exit Sub
l_center = (l_min + l_max) \ 2
l_compare = l_arr(l_center)
l_arr(l_center) = l_arr(l_min)
l_set = l_min
For l_idx = (l_min + 1) To l_max
If (l_arr(l_idx) < l_compare) Then
l_set = l_set + 1
l_exchange = l_arr(l_set)
l_arr(l_set) = l_arr(l_idx)
l_arr(l_idx) = l_exchange
End If
Next l_idx
l_arr(l_min) = l_arr(l_set)
l_arr(l_set) = l_compare
Call QSort(l_arr, l_min, l_set - 1)
Call QSort(l_arr, l_set + 1, l_max)
End Sub
件数が少ない場合には バブルソートでも問題ないのかも知れませんが クイックソートが関数化されているので 必要性は少ない
かも知れません
簡単なロジックですが 一応 残しておきます
Dim SortData(99) As Long
Dim l_idx1 As Long
Dim l_idx2 As Long
Dim l_exchange As Long
For l_idx1 = 0 To UBound(SortData) - 1
For l_idx2 = (l_idx1 + 1) To UBound(SortData)
If (SortData(l_idx1) > SortData(l_idx2)) Then
l_exchange = SortData(l_idx1)
SortData(l_idx1) = SortData(l_idx2)
SortData(l_idx2) = l_exchange
End If
Next l_idx2
Next l_idx1