VBA – Classificar Matriz

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on August 30, 2023

Este tutorial demonstrará como classificar valores em uma matriz no VBA.

Classificação de uma Matriz Unidimensional Usando um Loop

A classificação de uma matriz requer um pouco de manipulação de dados usando loops, variáveis e matrizes temporárias.

  • Primeiro, você precisa preencher a matriz com seus valores.
  • Em seguida, você precisa fazer um loop na matriz duas vezes! Uma vez para obter um valor da matriz do elemento atual e, enquanto ainda estiver nesse loop, para obter o valor do próximo elemento da matriz.
  • Em seguida, você precisa comparar os elementos e mover o segundo elemento para a posição do primeiro se o segundo estiver alfabeticamente ANTES do primeiro.

O exemplo abaixo demonstra esse procedimento.

Sub ClassificarUmaMatriz()
   Dim i As Long
   Dim j as Long
'Definir a matriz
   Dim strNome() As Variant
   Dim Temp As Variant
'preencher a matriz
   strNome() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")
'loop through bound of the arry and get the first name
   For i = LBound(strNome) To UBound(strNome) - 1
'repetir o loop novamente e verificar se o próximo nome está em ordem alfabética antes ou depois do original
      For j = i + 1 To UBound(strNome)
         If UCase(strNome(i)) > UCase(strNome(j)) Then
'se o nome precisar ser movido antes do nome anterior, adicione-o a uma matriz temporária
            Temp = strNome(j)
'trocar os nomes
            strNome(j) = strNome(i)
            strNome(i) = Temp
         End If
     Next j
   Next i
'Exibir a matriz por meio de uma caixa de mensagem
   MsgBox Join(strNome(), vbCrLf)
End Sub

Se você executar esse procedimento, obterá a seguinte caixa de mensagem.

vba sort array forwards

Você também pode classificar a matriz na outra direção, por exemplo, de Z para A, alterando esta linha de código

If UCase(strNome(i)) > UCase(strNome(j)) Then

para esta linha de código

Se UCase(strNome(i)) < UCase(strNome(j)) Then

Você verá a seguinte caixa de mensagem.

vba sort array backwards

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA