Excel VBA | 昇順・降順を切り替えられる汎用ソート関数

Excel VBA VBA
スポンサーリンク

昇順・降順を切り替えられる汎用ソート関数(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
VB

2. 使用例(昇順・降順)

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のキーや値にも応用可能

👉 この汎用関数を使えば「昇順・降順を切り替えながらソート」できるので、デバッグやデータ整理がぐっと効率的になります。

タイトルとURLをコピーしました