【VBA】配列を昇順または降順に並べ替えます
今回は受け取った配列を 昇順 または 降順 に並べ替えるユーザー定義関数を掲載します。昇順は数字を小さい順に並べること、降順は大きい順に並べることです。この2つの機能をひとつの関数でまとめて実装するので、とってもお得なレシピになってます。
'[VBA] 配列を昇順または降順に並べ替える関数 Option Base 1 Function Sort_Array(x() As Variant, Optional s As Long = 0) As Variant Dim k As Long Dim ub As Long Dim y() As Variant '配列x()のインデックス上限値を取得 ub = UBound(x) '配列y()のインデックス上限値を設定 ReDim y(ub) For k = 1 To ub 'オプション引数s=0は昇順です If s = 0 Then y(k) = WorksheetFunction.Small(x(), k) 'オプション引数sに0以外の値が入ると降順です Else y(k) = WorksheetFunction.Large(x(), k) End If Next k Sort_Array = y() End Function
この関数は第1引数に渡す配列は必須ですが、2 つめの引数は「昇順」または「降順」を選択するためのオプション引数となっています。もしこの引数を省略すると自動的に 0 が入り、配列を昇順に並べ替えます。
並び替えにはワークシート関数の Small と Large を利用しています。
Small関数をワークシートで使う場合は
と記述します。第2引数で指定された値を x とすると、指定されたセル範囲にあるデータの中から「x 番目小さい数」を取り出します。Large関数の場合は「x 番目に大きい数」です。
上のコードでは、オプション引数が 0 に指定された場合は、Small関数を使って 1 番小さな数を y(1) に入れて、その次に 2 番目に小さな数を y(2) に入れて … ということを繰り返して昇順並べを実現しています。それでは、Sort_Array関数を実際に呼びだして使ってみましょう。
'[VBA] Sort_Array関数のテストプログラム
Sub Test_Sort()
Dim z As Variant
Dim a(5) As Variant
Dim j As Long
a(1) = 52
a(2) = 73
a(3) = 41
a(4) = 19
a(5) = 38
z = Sort_Array(a(), 1)
For j = 1 To 5
Debug.Print z(j);
Next j
End Sub
Test_Sort() では、オプション引数を「 1 」に指定しているので、配列は降順(大きい順)に並び替えられて
73 52 41 38 19
と表示されます。
【VBA】配列要素を逆順に並べ替えます
次は配列を 逆順に並べ替える関数 を作ってみます。たとえば、配列変数 x(i) に
x(1) = orange x(2) = apple x(3) = banana x(4) = melon x(5) = peach
のように格納されている要素を、新しい配列変数 y(i) に
y(1) = x(5) y(2) = x(4) y(3) = x(3) y(4) = x(2) y(5) = x(1)
のように格納し直すことで逆順ソートを実現できます。
'[VBA] 配列要素を逆順に並べるFunctionプロシージャ
Option Base 1
Function REVERSE(x() As Variant) As Variant
Dim n As Long, i As Long
Dim ub As Long
Dim y() As Variant
ub = UBound(x)
ReDim y(ub)
For i = 1 To ub
y(i) = x(ub - i + 1)
Next i
REVERSE = y()
End Function
さっそく、REVERSE 関数をテストしてみましょう。
'[VBA] Reverse関数のテストプロシージャ
Sub Test_Reverse()
Dim x(5) As Variant
Dim y As Variant
Dim i As Long
x(1) = "orange"
x(2) = "apple"
x(3) = "banana"
x(4) = "melon"
x(5) = "peach"
y = REVERSE(x())
For i = 1 To 5
Debug.Print y(i)
Next i
End Sub
Test_Reverse() を実行すると、イミディエイトウィンドウに
peach melon banana apple orange
が表示されます。
コメント