更新日:、 作成日:

VBA 配列の並びを反転させる

はじめに

Excel VBA マクロの配列の並びを反転させる方法を紹介します。

配列を反転して逆順にしたり、昇順に並んでいるのを降順にできます。

For インデックス = 最大値 To 最小値 Step -1 のようにして、For を逆順にループできます。

昇順に並び替えるには「配列の並び替え」をご覧ください。

配列を反転する

引数の配列を反転させる Reverse 関数を作成します。反転した配列を返す ReverseArray 関数を作成します。どちらも同じように逆順に並べ替えられます。

Sub 実行()
    Dim list As Variant
    list = Array(1, 2, 3, 4, 5)

    ' 引数の配列を反転
    Call Reverse(list)

    Dim v As Variant
    For Each v In list
        Debug.Print(v) ' 5 4 3 2 1
    Next

    ' 配列を反転して返す
    Dim a As Variant
    a = ReverseArray(Array(1, 2, 3, 4, 5))

    For Each v In a
        Debug.Print(v) ' 5 4 3 2 1
    Next
End Sub

' 引数の配列を反転します。
Sub Reverse(ByRef list As Variant)

    Dim low As Long
    low = LBound(list)
    Dim high As Long
    high = UBound(list)

    Dim temp As Variant
    temp = list

    Dim length As Long
    length = (high - low) + 1

    Dim i As Long
    For i = 0 To length - 1
        list(low + i) = temp(high - i)
    Next

End Sub

' 配列を反転して返します。
Function ReverseArray(ByVal list As Variant)

    Dim low As Long
    low = LBound(list)
    Dim high As Long
    high = UBound(list)

    Dim temp As Variant
    ReDim temp(low To high)

    Dim length As Long
    length = (high - low) + 1

    Dim i As Long
    For i = 0 To length - 1
        temp(low + i) = list(high - i)
    Next

    ReverseArray = temp
End Function

どの型にも対応するために Variant 型を使用していますが、Integer や Long など配列の型を指定した方が速度が上がります。

すでに昇順に並んでいる配列を反転して、降順に並び替えられます。

For を逆順にループする

For インデックス = 最大値 To 最小値 Step -1 のように入力して、For を逆順にループできます。

Dim list As Variant
list = Array(1, 2, 3, 4, 5)

' For を逆順にループ
Dim i As Long
For i = UBound(list) To LBound(list) Step -1
    Debug.Print(list(i)) ' 5 4 3 2 1
Next
    
' 通常の For ループ
For i = LBound(list) To UBound(list)
    Debug.Print(list(i)) ' 1 2 3 4 5
Next
For について詳しくは「For 文」をご覧ください。