Anteriormente, no VBA, era difícil classificar um array.
Era necessário escrever sua própria função de ordenação ou copiar os dados para a planilha e ordená-los lá. Nenhum dos métodos era ideal.
Mas desde o Excel 2021 e 365 existe uma nova função de ordenação de planilha que podemos usar para classificar nossos arrays. Neste artigo, vou mostrar como usá-la com muitos exemplos.
Dados de Exemplo para este artigo
Este é o conjunto de dados que vamos usar neste artigo:
| Nome | Idade | Departamento |
| Bob | 93 | RH |
| Fiona | 31 | Finanças |
| Ethan | 79 | Engenharia |
| Ian | 99 | Marketing |
| George | 43 | Engenharia |
| Charlie | 41 | RH |
| Julia | 77 | Finanças |
| Hannah | 89 | Marketing |
| Alice | 70 | Engenharia |
| Diana | 86 | RH |
Você pode usar o seguinte código para testar os exemplos de ordenação. Este código lê os dados da Planilha1, ordena os dados e escreve os dados ordenados na Planilha2.
Sub TestSort() ' Ler dados da planilha1 Dim data As Variant data = ThisWorkbook.Worksheets("Planilha1").Range("A2:C11").Value ' Ordenar os dados data = WorksheetFunction.Sort(data) ' Escrever os dados ordenados na planilha2 ThisWorkbook.Worksheets("Planilha2").Range("A2:C11").Value = data End Sub
A Função de Ordenação da Planilha
Os parâmetros da função Sort
array: o array ou intervalo a ser ordenado
sort_Index: um número indicando a linha ou coluna a ser ordenada.
sort_order: um número indicando a ordem de classificação desejada; 1 para ordem crescente (padrão), -1 para ordem decrescente.
By_col: um valor lógico indicando a direção de ordenação desejada; FALSO para ordenar por linha (padrão), VERDADEIRO para ordenar por coluna.
Exemplos
' coluna 1. Crescente. Por linha. data = WorksheetFunction.Sort(data, 1, 1, False) ' coluna 2. Crescente. Por linha. data = WorksheetFunction.Sort(data, 2, 1, False) ' coluna 3. Crescente. Por linha. data = WorksheetFunction.Sort(data, 3, 1, False) ' coluna 1. Decrescente. Por linha. data = WorksheetFunction.Sort(data, 1, -1, False) ' coluna 2. Decrescente. Por linha. data = WorksheetFunction.Sort(data, 2, -1, False) ' coluna 3. Decrescente. Por linha. data = WorksheetFunction.Sort(data, 3, -1, False) ' linha 1. Crescente. Por coluna. data = WorksheetFunction.Sort(data, 1, 1, True) ' linha 1. Decrescente. Por coluna. data = WorksheetFunction.Sort(data, 1, -1, True)
Classificando Arrays para versões anteriores do Excel
Se a nova função Sort não estiver disponível na sua versão do Excel, você precisará usar uma função como QuickSort abaixo:
' https://excelmacromastery.com/ Sub QuickSort(arr As Variant, first As Long, last As Long) Dim vCentreVal As Variant, vTemp As Variant Dim lTempLow As Long Dim lTempHi As Long lTempLow = first lTempHi = last vCentreVal = arr((first + last) \ 2) Do While lTempLow <= lTempHi Do While arr(lTempLow) < vCentreVal And lTempLow < last lTempLow = lTempLow + 1 Loop Do While vCentreVal < arr(lTempHi) And lTempHi > first lTempHi = lTempHi - 1 Loop If lTempLow <= lTempHi Then ' Trocar valores vTemp = arr(lTempLow) arr(lTempLow) = arr(lTempHi) arr(lTempHi) = vTemp ' Mover para as próximas posições lTempLow = lTempLow + 1 lTempHi = lTempHi - 1 End If Loop If first < lTempHi Then QuickSort arr, first, lTempHi If lTempLow < last Then QuickSort arr, lTempLow, last End Sub
Você pode usar esta função assim:
' https://excelmacromastery.com/ Sub TestSort() ' Criar array temporário Dim arr() As Variant arr = Array("Banana", "Melão", "Pêssego", "Ameixa", "Maçã") ' Ordenar array QuickSort arr, LBound(arr), UBound(arr) ' Imprimir arr na Janela Imediata (Ctrl + G) Dim i As Long For i = LBound(arr) To UBound(arr) Debug.Print arr(i) Next i End Sub
Aprenda mais sobre Excel: https://www.render.com.br/cursos/excel
Artigo escrito por: Paul Kelly

