Exercício Resolvido
Resolvendo o Problema
-
Crie duas Subs: uma para a resposta e outra para testarmos a solução.
Sub Resolucao()
End Sub
Sub OrdenarVetor()
End
-
Na Sub de teste, vamos criar um vetor String com valores.
Sub Resolucao ()
Dim Nome(2 to 11) As String
Nome(2)="Frederico"
Nome(3)="Pedro"
Nome(4)="Ana"
Nome(5)="João"
Nome(6)="Fernanda"
Nome(7)="Valter"
Nome(8)="Marcelo"
Nome(9)="Daniela"
Nome(10)="Maria"
Nome(11)="Denise"
End Sub
-
Agora adequamos a Sub da solução para receber um vetor como parâmetro e ordená-lo.
Sub OrdenarVetor(vetor)
Dim valorTemp As String
Dim i As Long
Dim j As Long
Dim PrimeiroIndice As Long
Dim UltimoIndice As Long
'Identificar intervalo do vetor
PrimeiroIndice = LBound(vetor)
UltimoIndice = UBound(vetor)
For i = PrimeiroIndice To UltimoIndice - 1
For j = i + 1 To UltimoIndice 'Conjunto de valores seguidos de PrimeiroIndice
If vetor(i) > vetor(j) Then 'Verificar necessidade de trocar vetor(i) com vetor(j)
'Trocar ordem para caso vetor(i) > vetor(j)
valorTemp = vetor(i)
vetor(i) = vetor(j)
vetor(j) = valorTemp
End If
Next j
Next i
End Sub
Para cada loop feito com contador j teremos definido mais um valor a partir do início do vetor, sendo a primeira iteração definindo o primeiro elemento do vetor, a segunda referente ao segundo e assim por diante.
Este algoritmo é conhecido como BubbleSort
-
Aplicamos a solução em nossa Sub de teste, evidenciando os resultados em uma sequencia de MsgBox
Sub Resolucao()
Dim i as Integer
Dim Nome(2 to 11) As String
Nome(2)="Frederico"
Nome(3)="Pedro"
Nome(4)="Ana"
Nome(5)="João"
Nome(6)="Fernanda"
Nome(7)="Valter"
Nome(8)="Marcelo"
Nome(9)="Daniela"
Nome(10)="Maria"
Nome(11)="Denise"
ordenarVetor Nome
For i = 2 To 11
MsgBox (Nome(i))
Next i
End Sub
Código Consolidado
Sub Resolucao()
Dim i as Integer
Dim Nome(2 To 11) As String
Nome(2) = "Frederico"
Nome(3) = "Pedro"
Nome(4) = "Ana"
Nome(5) = "João"
Nome(6) = "Fernanda"
Nome(7) = "Valter"
Nome(8) = "Marcelo"
Nome(9) = "Daniela"
Nome(10) = "Maria"
Nome(11) = "Denise"
ordenarVetor Nome
For i = 2 To 11
MsgBox (Nome(i))
Next i
End Sub
Sub OrdenarVetor(vetor)
Dim valorTemp As String
Dim i As Long
Dim j As Long
Dim PrimeiroIndice As Long
Dim UltimoIndice As Long
PrimeiroIndice = LBound(vetor)
UltimoIndice = UBound(vetor)
For i = PrimeiroIndice To UltimoIndice - 1
For j = i + 1 To UltimoIndice
If vetor(i) > vetor(j) Then
valorTemp = vetor(i)
vetor(i) = vetor(j)
vetor(j) = valorTemp
End If
Next j
Next i
End Sub
SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.
Excel ® é uma marca registrada da Microsoft Corporation.
© 2024 SuperExcelVBA | SOBRE