配列操作

一次元配列の並びを反転させる(降順に並び替える)【ExcelVBA】

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■配列を逆順に並び替えする
Public Function Call_ArrayReverse(ByRef arr As Variant)
    Dim temp() As Variant
    Dim sStart As Long
    Dim sEnd As Long
    Dim i As Long
    Dim cnt As Long
    
    sStart = LBound(arr)
    sEnd = UBound(arr)
    
    '■一時的な配列を作成
    ReDim Preserve temp(sStart To sEnd)
    cnt = (sEnd - sStart) + 1
    
    '■arr→tempへ逆順でデータを渡す
    For i = 0 To cnt - 1
        temp(sStart + i) = arr(sEnd - i)
    Next
    '■temp→arrへ正順でデータを渡す
    '■=arrが逆順になる
    For i = 0 To cnt - 1
        arr(sStart + i) = temp(sStart + i)
    Next

End Function

使い方

上記をコピペでお好きなモジュール内に記載してください。

Public Sub test()

    Dim arr As Variant
    arr = Array(5, 1, 2)
    
    Call Call_ArrayReverse(arr)
          
    '■配列が以下のようにソートされる
    '2 1 5
End Sub

注意点

関連記事

指定した要素で配列を作成【Array関数】【ExcelVBA】
一次元/二次元配列の要素数の最小値を取得する【Lbound関数】
一次元/二次元配列の要素数の最大値を取得する【Ubound関数】

コメント

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