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.

ordenar um array-1

Etapas para classificar um array

  1. Primeiro, você precisa escrever um loop aninhado com For Next usando os limites superior e inferior do array.
  2. Depois disso, neste loop, você precisa usar a instrução VBA IF para comparar os dois elementos.
  3. A partir daí, se o primeiro elemento vier antes do próximo elemento, você precisará trocá-los salvando seus valores em variáveis.
  4. 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

Adicione um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *