更新日:、 作成日:
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 文」をご覧ください。