|
通常、VBAでは構造体と言う言い方はしないと思います(Cには有ったと思うけど)
因って、何処え、どんな形で格納しているのか解りませんが
配列のソートは、バブルソート、Quickソート、Shellソート等いろいろなアルゴリズムが有ります
1例で、Shellソートを示します
Option Explicit
Public Sub Sample()
Dim i As Long
Dim vntData As Variant
vntData = Array(5, 4, 7, 6, 9, 2, 3, 1, 8)
ShellSort vntData
For i = 0 To UBound(vntData)
Debug.Print vntData(i)
Next i
End Sub
Public Sub ShellSort(vntList As Variant, _
Optional lngNum As Long = -1, _
Optional lngStart As Long = -1)
' シェルソート
Dim i As Long
Dim j As Long
Dim lngGap As Long
Dim vntTmp As Variant
Dim lngTop As Long
Dim lngEnd As Long
lngTop = LBound(vntList, 1)
If lngStart > -1 Then
If lngStart >= LBound(vntList, 1) Then
lngTop = lngStart
End If
End If
lngEnd = UBound(vntList, 1)
If lngNum > -1 Then
If lngTop + lngNum - 1 <= UBound(vntList, 1) Then
lngEnd = lngTop + lngNum - 1
End If
End If
lngGap = 1
Do While lngGap < (lngEnd - lngTop + 1) \ 3
lngGap = 3 * lngGap + 1
Loop
Do Until lngGap <= 0
For i = lngGap + lngTop To lngEnd
vntTmp = vntList(i)
For j = i To lngGap + lngTop Step -lngGap
If vntList(j - lngGap) <= vntTmp Then
Exit For
End If
vntList(j) = vntList(j - lngGap)
Next j
vntList(j) = vntTmp
Next i
lngGap = lngGap \ 3
Loop
End Sub
|
|