VBA – Ordenando Arrays Multi Dimensionais

Mais uma do fórum, dessa vez, da autoria do colega André.

O código abaixo faz a ordenação de um array multidimensional, incrementando um exemplo já colocado aqui no blog que fazia o trabalho, mas somente com em arrays com uma dimensão. Bom, o código e seus comentários falam por si:

'@Sort ArrayMulti
'@Data: 04/08/2010
'@Autor: André Tonini
'   Esta função ordena um array multidimensional
'   Parametros
'       @TheArray - Array - Array que será ordenado
'       @Column - Integer - Por qual coluna o array será ordenado
'       @ColumnCount - Integer - O número de colunas do array
 
Public Function SortArrayMulti(ByRef TheArray As Variant, _
                                    Column, _
                                    ColumnCount)
    'Variaveis
    '----------
    Dim temp()
    Dim x, i, y As Integer
    Dim sorted As Boolean
 
    'Dimensões do array
    '------------------
    ReDim Preserve temp(1 To UBound(TheArray, Column), 1 To ColumnCount)
 
 
    'Repetição para ordenar até o final do array
    '--------------------------------------------
    Do While Not sorted
 
        'No inicio ele está ordenado
        '--------------------------
        sorted = True
 
        'Laço que percorre as linhas
        '----------------------------
        For x = linhaCabecalho + 1 To UBound(TheArray, Column) - 1
 
            'Faz a comparação
            '----------------
            If (TheArray(x, Column) > TheArray(x + 1, Column) And TheArray(x + 1, Column) <> Empty) Then
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    temp(x, y) = TheArray(x + 1, y)
                Next y
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    TheArray(x + 1, y) = TheArray(x, y)
                Next y
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    TheArray(x, y) = temp(x, y)
                Next y
 
                'Passou pelo if, então não está ordenado
                '---------------------------------------
                sorted = False
 
            End If
        Next x
    Loop
 
End Function

Valeu André!

Comentários

comentários