配列の要素を昇順でソートする。(クイックソート)
配列の要素を昇順でソートします。
サンプルコードにはクイックソートを利用したコードを掲載しています。
※クイックソートとは基準値を定めてその基準値より小さい値のグループと大きい値のグループに分け、分けたそれぞれのグループの中でさらに同じようにグループ分け繰り返し行う(ソート処理をしているSubプロシージャを再帰的に実行する)ことで、最終的に全体の並べ替えを完了させるソートの方法になります。
'******************************************************************
' 配列のソート
'******************************************************************
Sub Main_ArySort()
Dim vAryData(6) As Variant
'配列内のデータ作成
vAryData(0) = "02_神奈川"
vAryData(1) = "04_千葉"
vAryData(2) = "03_埼玉"
vAryData(3) = "06_栃木"
vAryData(4) = "07_群馬"
vAryData(5) = "01_東京"
vAryData(6) = "05_茨城"
'配列内を昇順でソート
Call sortQuick_Asc(vAryData, LBound(vAryData), UBound(vAryData))
'配列の中を順次表示
Dim i As Long
For i = 0 To UBound(vAryData)
Debug.Print vAryData(i)
Next
End Sub
'******************************************************************
' 配列を昇順でソート(クイックソート)
'------------------------------------------------------------------
' 第1引数:配列データ(参照渡し)
' 第2引数:配列の最小要素数
' 第3引数:配列の最大要素数
'******************************************************************
Function sortQuick_Asc(ByRef vAryData() As Variant, lLow As Long, lUp As Long) As Variant
'基準値
Dim vStd As Variant
vStd = vAryData(Int((lLow + lUp) / 2))
Dim i As Long
i = lLow
Dim j As Long
j = lUp
Dim vTemp As Variant
Do
'基準値より小さい間はループ
Do While vAryData(i) < vStd
i = i + 1
Loop
'基準値より大きい間はループ
Do While vAryData(j) > vStd
j = j - 1
Loop
'ループ終了判定
If i >= j Then
Exit Do
End If
vTemp = vAryData(i)
vAryData(i) = vAryData(j)
vAryData(j) = vTemp
i = i + 1
j = j - 1
Loop
'再帰呼び出し
If (lLow < i - 1) Then
Call sortQuick_Asc(vAryData, lLow, i - 1)
End If
If (lUp > j + 1) Then
Call sortQuick_Asc(vAryData, j + 1, lUp)
End If
End Function
■実行結果



