昇順・降順を切り替えられる汎用ソート関数(VBA)
配列やDictionaryのキー・値をソートするときに「昇順」「降順」を切り替えられると便利です。以下は 汎用的なソート関数 の例です。
1. 配列用の汎用ソート関数
Function SortArray(arr As Variant, Optional ascending As Boolean = True) As Variant
Dim tmp As Variant
Dim i As Long, j As Long
Dim t As Variant
tmp = arr
For i = LBound(tmp) To UBound(tmp) - 1
For j = i + 1 To UBound(tmp)
If ascending Then
If tmp(i) > tmp(j) Then
t = tmp(i): tmp(i) = tmp(j): tmp(j) = t
End If
Else
If tmp(i) < tmp(j) Then
t = tmp(i): tmp(i) = tmp(j): tmp(j) = t
End If
End If
Next j
Next i
SortArray = tmp
End Function
VB2. 使用例(昇順・降順)
Sub TestSortArray()
Dim arr As Variant
arr = Array(5, 2, 9, 1, 7)
' 昇順
Dim ascArr As Variant
ascArr = SortArray(arr, True)
Debug.Print "昇順:"
For i = LBound(ascArr) To UBound(ascArr)
Debug.Print ascArr(i)
Next i
' 降順
Dim descArr As Variant
descArr = SortArray(arr, False)
Debug.Print "降順:"
For i = LBound(descArr) To UBound(descArr)
Debug.Print descArr(i)
Next i
End Sub
VB出力例:
昇順:
1
2
5
7
9
降順:
9
7
5
2
1
3. Dictionaryのキーや値に応用
Dictionaryのキーや値を配列化して、この関数に渡せば昇順・降順を切り替えてソート可能です。
For Each k In SortArray(dict.Keys, False) ' 降順
Debug.Print k & " => " & dict(k)
Next
VBまとめ
SortArray(arr, True)→ 昇順SortArray(arr, False)→ 降順- 配列だけでなく、Dictionaryのキーや値にも応用可能
👉 この汎用関数を使えば「昇順・降順を切り替えながらソート」できるので、デバッグやデータ整理がぐっと効率的になります。

