Como classificar um array em vba?
Para classificar um array no VBA, você precisa escrever um código no qual possa combinar o primeiro elemento do array com o próximo e trocá-los se o primeiro vier antes. Você precisa de um loop FOR (For Next) para isso e a função UCASE .
Neste tutorial, veremos as duas formas (AZ e ZA) de ordenar os elementos de um array.
Classificar uma matriz (AZ)
No código abaixo, você tem um array com cinco elementos, e esses elementos possuem valores que variam de E a A, e agora precisamos ordenar na ordem AZ.
Etapas para classificar um array
- Primeiro, você precisa escrever um loop aninhado com For Next usando os limites superior e inferior do array.
- Depois disso, neste loop, você precisa usar a instrução VBA IF para comparar os dois elementos.
- A partir daí, se o primeiro elemento vier antes do próximo elemento, você precisará trocá-los salvando seus valores em variáveis.
- No final, use a palavra-chave “Next” para completar o loop.
Option Base 1 Sub vba_sort_array_a_to_z() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "E" myArray(2) = "D" myArray(3) = "C" myArray(4) = "B" myArray(5) = "A" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) > UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub
Certifique-se de ativar a janela Imediata para ver os resultados lá.
Classificar uma matriz (ZA)
Da mesma forma, você pode classificar por ZA. No método anterior, comparamos o primeiro elemento com o próximo elemento da sequência, mas neste código você precisa fazer o oposto. Portanto, se o segundo elemento (o próximo na ordem) for maior que o primeiro, o código irá trocá-los.
Option Base 1 Sub vba_sort_array_z_to_a() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "A" myArray(2) = "B" myArray(3) = "C" myArray(4) = "D" myArray(5) = "E" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) < UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub