| 
    
     |  | 通常、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
 
 |  |