The performance for the above, to my knowledge, gets cumulatively worse for each added item. Here is a solution which requires less calculating with big arrays (but uses more memory too):

VB Code:
  1. Option Explicit
  2.  
  3. Private Type PlayerArray
  4.     PlayerID As Long
  5.     Firstname As String
  6.     Lastname As String
  7.     Weight As Byte
  8. End Type
  9.  
  10. Dim aPlayer() As PlayerArray
  11. Private Sub SortArray()
  12.     Dim TempArray As New Collection, A As Long, B As Long, C As Long
  13.     Dim SortedArray() As PlayerArray
  14.     TempArray.Add 0
  15.     For A = 1 To UBound(aPlayer)
  16.         For B = 1 To TempArray.Count
  17.             C = CLng(TempArray(B))
  18.             If aPlayer(A).PlayerID < aPlayer(C).PlayerID Then TempArray.Add A, , B: Exit For
  19.         Next B
  20.         'check if we exited from the loop or not
  21.         If B > TempArray.Count Then TempArray.Add A
  22.     Next A
  23.     ReDim SortedArray(UBound(aPlayer))
  24.     For A = 1 To TempArray.Count
  25.         B = CLng(TempArray(A))
  26.         With SortedArray(A - 1)
  27.             .PlayerID = aPlayer(B).PlayerID
  28.             .Firstname = aPlayer(B).Firstname
  29.             .Lastname = aPlayer(B).Lastname
  30.             .Weight = aPlayer(B).Weight
  31.         End With
  32.     Next A
  33.     For A = 0 To UBound(aPlayer)
  34.         aPlayer(A).PlayerID = SortedArray(A).PlayerID
  35.         aPlayer(A).Firstname = SortedArray(A).Firstname
  36.         aPlayer(A).Lastname = SortedArray(A).Lastname
  37.         aPlayer(A).Weight = SortedArray(A).Weight
  38.     Next A
  39. End Sub
  40. Private Sub Form_Load()
  41.     Dim A As Byte
  42.     ReDim aPlayer(2)
  43.     With aPlayer(0)
  44.         .PlayerID = 1
  45.         .Firstname = "Jack"
  46.         .Lastname = "Humblerose"
  47.         .Weight = 80
  48.     End With
  49.     With aPlayer(1)
  50.         .PlayerID = 1
  51.         .Firstname = "Jack"
  52.         .Lastname = "Abrahamson"
  53.         .Weight = 90
  54.     End With
  55.     With aPlayer(2)
  56.         .PlayerID = 0
  57.         .Firstname = "Jack"
  58.         .Lastname = "Rogers"
  59.         .Weight = 100
  60.     End With
  61.     SortArray
  62.     For A = 0 To 2
  63.         With aPlayer(A)
  64.             Debug.Print "PlayerID:  " & .PlayerID
  65.             Debug.Print "Firstname: " & .Firstname
  66.             Debug.Print "Lastname:  " & .Lastname
  67.             Debug.Print "Weight:    " & .Weight
  68.         End With
  69.     Next A
  70. End Sub


You can get it faster if you can figure out how to use CopyMemory to copy complete data from SortedArray to aPlayer... I tried playing with it, but since I couldn't figure it out in my limited time (have to go to work soon), I didn't do it.