ERRO NA ORDENA?ÃO DE ARRAYS

KELLY 10/10/2014 20:49:37
#441865
Boa noite pessoal,

Criei um código para organizar algumas informações em Arrays, mas estou com um grande problema. Ao invés de aparecer na sequência N1..., N2..., N3..., N4... e assim por diante, ele está aparecendo: N1..., N10..., N11... etc.

Segue o código abaixo:

Private Sub Form_Load()
[ô]Dim valores(12) As Variant
Dim Str1 As String
Dim Str2 As String

valores = Array([Ô]N2 XDFSDFKE[Ô], [Ô]N1 DHFJCKLS[Ô], [Ô]N4 HDKEIRKF[Ô], [Ô]N4 HEKDOSKD[Ô], [Ô]N3 URDKWJDI[Ô], [Ô]N8 HDJWIDKL[Ô], [Ô]N9 AHSKDWLK[Ô], [Ô]N11 BHWKJIUE[Ô], [Ô]N10 FHSKJEID[Ô], [Ô]N5 JHSJEOJD[Ô], [Ô]N6 PDKSKDOP[Ô], [Ô]N7 KHSKCEOP[Ô], [Ô]N12 QHSKEOP[Ô])

s = [Ô][Ô]
For Each valor In valores
s = s & valor & [Ô], [Ô]
Next valor

MsgBox [Ô]Não-Ordenados: [Ô] & vbNewLine & s

For i = LBound(valores) To UBound(valores)

For j = LBound(valores) To UBound(valores)

Str1 = Mid(valores(i), 1, InStr(1, valores(i), [Ô] [Ô]))
Str2 = Mid(valores(j), 1, InStr(1, valores(j), [Ô] [Ô]))

If Str1 < Str2 Then
temp = valores(i)
valores(i) = valores(j)
valores(j) = temp
End If

Next j

Next i
SINCLAIR 13/10/2014 08:27:26
#441882
Resposta escolhida
Colega,

Quando ordenando arrays de string, realmente o 10 vem antes do 2, por exemplo, porque compara o código ASCII do caracter [Ô]1[Ô] com o código ASCII do caracter [Ô]2[Ô] assim o [Ô]1[Ô] do 10 vem antes do 2 e 10 acaba aparecendo na frente.

Já se comparar como números, usando a função VAL, dai número 2 (e não código ASCII do caracter [Ô]2[Ô]) virá antes do 10 (e não código ASCII dos caracteres [Ô]1[Ô] e [Ô]0[Ô]).

Tudo de bom.
KELLY 13/10/2014 21:29:44
#441899
Boa noite Zeuzebio,

Entendi o que você quis dizer, você sabe como eu faço para remover as Arrays que tiver duplicadas?

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