ORDANIZAR DADOS DE ARRAYS

KELLY 07/10/2014 21:06:52
#441787
Boa noite turma,

Alguém poderia me dar uma força nesse código? Eu queria organizar as linhas conforme a ordem da coluna que contem o X1, X2, X3, X4. Exemplo:

6+5 X1 %%C76.23 685
3 X2 %%C16 678
2 X3 %%C8 678
3 X4 %%C10 456
87 X5 %%C8 c/67 DADOS (245a2345)
89 X6 %%C16 c/87 DADOS (89768aHHH)
80 X7 %%C16 789
12 X8 %%C16 c/10 456
34 X9 %%C12.5 c/20 768
67 X10 %%C6.3 c/65 160[Ô]
56 X11 %%C8 c/34 DADOS (XXa3453)
12 X12 %%C8 c/57 678

Private Sub Form_Load()
Dim Array1(11) As String
Dim Count As Integer
Dim Cont As Integer
Dim Quantidade As String
Dim Modelo As String
Dim Diametro As String
Dim Espacamento As String
Dim Comprimento As String
Dim ValorMedia As String
Dim strString As Variant
Dim i As Integer

Array1(0) = [Ô]6+5 X1 %%C76.23 685[Ô]
Array1(1) = [Ô]3 X2 %%C16 678[Ô]
Array1(2) = [Ô]3 X4 %%C10 456[Ô]
Array1(3) = [Ô]2 X3 %%C8 678[Ô]
Array1(4) = [Ô]12 X8 %%C16 c/10 456[Ô]
Array1(5) = [Ô]34 X9 %%C12.5 c/20 768[Ô]
Array1(6) = [Ô]56 X11 %%C8 c/34 DADOS (XXa3453)[Ô]
Array1(7) = [Ô]67 X10 %%C6.3 c/65 160[Ô]
Array1(8) = [Ô]87 X5 %%C8 c/67 DADOS (245a2345)[Ô]
Array1(9) = [Ô]89 X6 %%C16 c/87 DADOS (89768aHHH)[Ô]
Array1(10) = [Ô]80 X7 %%C16 789[Ô]
Array1(11) = [Ô]12 X12 %%C8 c/57 678[Ô]

Na caixa de diálogo eu coloquei a coluna com os [Ô]X[Ô] para aparecer na primeira posição, quero listar assim, mas começando do X1, X2, X3 e assim por diante. Segue o meu código:

For Count = LBound(Array1) To UBound(Array1)

If InStr(1, Array1(Count), [Ô]%%[Ô]) > 0 Then

strString = Split(Array1(Count), [Ô] [Ô])

For i = LBound(strString) To UBound(strString)
If i = 0 Then
Quantidade = strString(0)
ElseIf i = 1 Then
Modelo = strString(1)
ElseIf i = 2 Then
Diametro = strString(2)
ElseIf i = 3 Then
Espacamento = strString(3)
ElseIf i = 4 Then
Comprimento = strString(4)
ElseIf i = 5 Then
ValorMedia = strString(5)
End If
Next i

Msgbox Modelo & [Ô];[Ô] & Quantidade & [Ô];[Ô] & Diametro & [Ô];[Ô] & Espacamento & [Ô];[Ô] & Comprimento & [Ô];[Ô] & ValorMedia

Cont = Cont + 1

End If

Next Count

End Sub
TUNUSAT 07/10/2014 21:33:46
#441789
KELLY,

Eu tenho um exemplo que acabei de passar uma parte para uma outra pergunta aqui no fórum ...
... vou passar a parte de ordenação que fiz para você ver, caso tenha problema eu posso postar o código-fonte completo se você quiser ver.

Funciona assim ... tem uma Array com um monte de frutas e duas listViews: - Uma que é uma cópia da Array e a Outra que é a Array depois de ordenada.
O segredo da ordenação da Array está nos Dois [Ô]For ... To ... Next[Ô] concatenados.


Private Sub Form_Load()
Dim strHorti As String
Dim x As Integer
Dim y As Integer

arrHorti(0).Nome = [Ô]Uva[Ô]
arrHorti(0).Tipo = [Ô]F[Ô]
arrHorti(1).Nome = [Ô]Laranja[Ô]
arrHorti(1).Tipo = [Ô]F[Ô]
arrHorti(2).Nome = [Ô]Cenoura[Ô]
arrHorti(2).Tipo = [Ô]L[Ô]
arrHorti(3).Nome = [Ô]Agrião[Ô]
arrHorti(3).Tipo = [Ô]V[Ô]
arrHorti(4).Nome = [Ô]Rúcula[Ô]
arrHorti(4).Tipo = [Ô]V[Ô]
arrHorti(5).Nome = [Ô]Pera[Ô]
arrHorti(5).Tipo = [Ô]F[Ô]
arrHorti(6).Nome = [Ô]Chuchu[Ô]
arrHorti(6).Tipo = [Ô]L[Ô]
arrHorti(7).Nome = [Ô]Alface[Ô]
arrHorti(7).Tipo = [Ô]V[Ô]
arrHorti(8).Nome = [Ô]Mostarda[Ô]
arrHorti(8).Tipo = [Ô]V[Ô]
arrHorti(9).Nome = [Ô]Batata[Ô]
arrHorti(9).Tipo = [Ô]L[Ô]
arrHorti(10).Nome = [Ô]Berijela[Ô]
arrHorti(10).Tipo = [Ô]L[Ô]
arrHorti(11).Nome = [Ô]Brócolis[Ô]
arrHorti(11).Tipo = [Ô]V[Ô]
arrHorti(12).Nome = [Ô]Banana[Ô]
arrHorti(12).Tipo = [Ô]F[Ô]
arrHorti(13).Nome = [Ô]Abóbora[Ô]
arrHorti(13).Tipo = [Ô]L[Ô]
arrHorti(14).Nome = [Ô]Giló[Ô]
arrHorti(14).Tipo = [Ô]L[Ô]
arrHorti(15).Nome = [Ô]Maçã[Ô]
arrHorti(15).Tipo = [Ô]F[Ô]

[ô] -----------------------------------

For x = 0 To UBound(arrHorti)
lstHortiDesordenadas.AddItem arrHorti(x).Tipo & [Ô] - [Ô] & arrHorti(x).Nome
Next x

[ô] -----------------------------------

For x = 0 To lstHortiDesordenadas.ListCount - 1

For y = 0 To lstHortiDesordenadas.ListCount - 1

If arrHorti(x).Nome < arrHorti(y).Nome Then
strHorti = arrHorti(y).Nome
arrHorti(y).Nome = arrHorti(x).Nome
arrHorti(x).Nome = strHorti
End If

Next y

Next x

For x = 0 To lstHortiDesordenadas.ListCount - 1

For y = 0 To lstHortiDesordenadas.ListCount - 1

If arrHorti(x).Tipo < arrHorti(y).Tipo Then
strHorti = arrHorti(y).Tipo
arrHorti(y).Tipo = arrHorti(x).Tipo
arrHorti(x).Tipo = strHorti
End If

Next y

Next x

lstHortiOrdenadas.Clear

For x = 0 To lstHortiDesordenadas.ListCount - 1
lstHortiOrdenadas.AddItem arrHorti(x).Tipo & [Ô] - [Ô] & arrHorti(x).Nome
Next x

End Sub


[][ô]s,
Tunusat.
KELLY 08/10/2014 00:01:32
#441795
Como eu faço para aplicar no meu código que pode possuir até 5 colunas?

TUNUSAT 08/10/2014 07:36:08
#441797
Resposta escolhida
KELLY,

Se você está trabalhando só com Array então terá que [Ô]manobrar[Ô].
Você toma como base a coluna que quer ordenar e depois as outras colunas tem que seguir o modelo.
Exemplo:
A linha 9 passará a ser a linha 1, então todas as arrays que você está usando precisam seguir o mesmo caminho.

Outra forma de fazer é usando algo para te ajudar.
Por exemplo uma RecordSet Desconectada.
Você pode colocar tudo dentro da RecordSet Desconectada e depois fazer uma ordenação dela.

Ou uma ListView (Microsoft Common Control 6.0 (SP6) - MSCOMCTL.OCX

[][ô]s,
Tunusat.
KELLY 10/10/2014 20:44:28
#441864
Obrigada Tunusat!!

Tópico encerrado , respostas não são mais permitidas