列挙体をメンバ名の順(値に割り当てられている名前の順)に並べるには、次のように並べ替え順序を定義する必要があります。 ただ、次の例にあるように、列挙体ではメンバ名で定義されていない値も設定できるため、そういった値をどう取り扱うかについての考慮も必要となってきます。

列挙体の値をメンバ名の順にソートする
Imports System

Enum Number
  MinusTwo = -2
  MinusOne = -1
  Zero = 0
  One = 1
  Two = 2
End Enum

Class Sample
  ' 列挙体の値を比較するメソッド
  Shared Function CompareNumber(ByVal x As Number, ByVal y As Number) As Integer
    ' 列挙体の値を文字列(メンバ名)に変換
    Dim xx As String = x.ToString("G")
    Dim yy As String = y.ToString("G")

    ' 文字列として比較した結果を返す
    Return String.Compare(xx, yy)
  End Function

  Shared Sub Main()
    Dim arr As Number() = New Number() { _
      Number.Zero, Number.One, Number.MinusOne, Number.Two, Number.MinusTwo, _
      CType(3, Number) _
    }

    Array.Sort(arr, AddressOf CompareNumber)

    For Each val As Number In arr
      Console.WriteLine("{0,-8:G} ({0:D})", val)
    Next
  End Sub
End Class
実行結果
3        (3)
MinusOne (-1)
MinusTwo (-2)
One      (1)
Two      (2)
Zero     (0)

列挙体の書式・文字列化については列挙体の基本と操作書式指定子を参照してください。