こんにちは。
VBAでの配列のソート方法のメモです。
本記事では、4つの方法を記載します。
InsertionSort
昇順でソートを行います。
引数は、以下です。
Private Sub InsertionSort(ByRef arr() As Long, ByVal low As Long, ByVal high As Long) Dim i As Long Dim k As Long Dim tmp As Long For i = low + 1 To high tmp = arr(i) If arr(i - 1) > tmp Then k = i Do While k > low If arr(k - 1) <= tmp Then Exit Do End If arr(k) = arr(k - 1) k = k - 1 Loop arr(k) = tmp End If Next End Sub
QuickSort
昇順でソートを行います。
引数は、以下です。
Private Sub QuickSort(ByRef arr() As Long, ByVal low As Long, ByVal high As Long) Dim l As Long: l = low Dim h As Long: h = high Dim pivot As Variant pivot = arr((low + high) \ 2) Dim tmp As Long Do While (l <= h) Do While (arr(l) < pivot And l < high) l = l + 1 Loop Do While (pivot < arr(h) And h > low) h = h - 1 Loop If (l <= h) Then tmp = arr(l) arr(l) = arr(h) arr(h) = tmp l = l + 1 h = h - 1 End If Loop If (low < h) Then Call QuickSort(arr, low, h) End If If (l < high) Then Call QuickSort(arr, l, high) End If End Sub
SmallSort
昇順でソートを行います。
引数は、対象の配列です。
戻り値は結果(ソートした配列)です。
Private Function SmallSort(ByRef arr() As Long) As Long() Dim h As Long: h = UBound(arr) Dim result() As Long ReDim result(h) Dim i As Long For i = 0 To h result(i) = WorksheetFunction.Small(arr(), i + 1) Next i SmallSort = result() End Function
LargeSort
降順でソートします。
引数は、対象の配列です。
戻り値は結果(ソートした配列)です。
Private Function LargeSort(ByRef arr() As Long) As Long() Dim h As Long: h = UBound(arr) Dim result() As Long ReDim result(h) Dim i As Long For i = 0 To h result(i) = WorksheetFunction.Large(arr(), i + 1) Next i LargeSort = result() End Function
まとめ
配列をソートすることって結構あると思うので
色々な方法を覚えていたら便利ですね。
ちなみに、今回はLong型の配列に対してソートを行う
サンプルになっています。
使う用途に合わせて変更してもらえればと思います。
以上です。