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