ジャグ配列の場合と同様、多次元配列もArray.Sortメソッドではソートすることは出来ません。 そもそもArray.Sortメソッドは1次元配列のみのソートしかサポートしていないため、Comparison<T>を指定しても多次元配列ソートすることは出来ず、RankExceptionがスローされます。 そこで、多次元配列をソートするには、一旦すべての要素を1次元配列に展開してからソートするか、次元毎に展開してジャグ配列に変換してからソートするなどの方法をとる必要があります。

次の例では、2次元配列を2段のジャグ配列に変換してからソートを行っています。 ジャグ配列のソートについては§.ジャグ配列のソートで解説したとおりですが、多次元配列から作成したジャグ配列は各次元の配列の長さが同じとなるため、長さが異なる場合を考慮する必要がなくなります。

2段のジャグ配列に変換して2次元配列をソートする
Imports System

Class Sample
  ' 2次元配列を2段のジャグ配列に変換
  Shared Function ToJaggedArray(ByVal arr As Integer(,)) As Integer()()
    ' 2段のジャグ配列を作成
    Dim jagged As Integer()() = New Integer(arr.GetLength(0) - 1)() {}

    For y As Integer = 0 To arr.GetLength(0) - 1
      ' 配列を作成してジャグ配列内に格納
      jagged(y) = New Integer(arr.GetLength(1) - 1) {}

      For x As Integer = 0 To arr.GetLength(1) - 1
        ' 2次元配列の内容を作成したジャグ配列にコピー
        jagged(y)(x) = arr(y, x)
      Next
    Next

    Return jagged
  End Function

  ' 長さが同じ二つの配列を比較するメソッド
  Shared Function CompareArray(ByVal x As Integer(), ByVal y As Integer()) As Integer
    For n As Integer = 0 To x.Length - 1
      If x(n) > y(n) Then
        Return 1
      Else If x(n) < y(n) Then
        Return -1
      End If
    Next

    Return 0
  End Function

  Shared Sub Main()
    Dim arr As Integer(,) = New Integer(,) { _
      {1, 2, 1}, _
      {2, 1, 1}, _
      {2, 2, 1}, _
      {2, 1, 1}, _
      {2, 1, 2}, _
      {1, 2, 3}, _
      {1, 1, 1}, _
      {1, 2, 2} _
    }

    ' ジャグ配列に変換
    Dim jagged As Integer()() = ToJaggedArray(arr)

    ' 変換したジャグ配列をソート
    Array.Sort(jagged, AddressOf CompareArray)

    For y As Integer = 0 To jagged.Length - 1
      For x As Integer = 0 To jagged(y).Length - 1
        Console.Write("{0}, ", jagged(y)(x))
      Next
      Console.WriteLine()
    Next
  End Sub
End Class
実行結果
1, 1, 1, 
1, 2, 1, 
1, 2, 2, 
1, 2, 3, 
2, 1, 1, 
2, 1, 1, 
2, 1, 2, 
2, 2, 1,