Ciao a tutti,
forse arrivo oltre il tempo massimo, però inserisco qui una macro (in parte scopiazzata da un forum "concorrente" e in parte affinata da me) che potrebbe servire: permette di ordinare delle serie alfanumeriche nel modo giusto:
- prima tutti i codici che iniziano con valori numerici
- se ci sono codici tipo 1, 1a, 1b, 1c andranno in quest'ordine e tutti prima di 2
- poi arrivano i codici che iniziano con un testo e in questo caso l'ordine sarà a1, a2, b1
tutto questo indipendentemente dalla lunghezza del testo e del valore numerico (si richiedono però sequenze senza spazi in cui vi sia prima solo testo poi solo numeri o viceversa: codici tipo X2RS8W9 sono un po' troppo complicati!).
Si considerano dati nella colonna A a partire da A1 e si utilizzano come colonne d'appogio CW e CX, tutto quello che sta in mezzo viene ordinato assieme alla colonna A.
- Codice: Seleziona tutto
Sub OrdinaNumeriLettere3()
Dim Area As Range
Dim Cl As Range, i As Long, NR As String, PR As String
Dim ctr As Boolean
With Sheets("foglio1")
Set Area = .Range("A1", .Range("A1").End(xlDown))
For Each Cl In Area
For i = 1 To Len(Cl)
If i = 1 And Not IsNumeric(Mid(Cl, i, 1)) Then
Do While Not IsNumeric(Mid(Cl, i, 1))
PR = Mid(Cl, 1, i)
i = i + 1
Loop
Cl.Offset(0, 100).Value = PR
Cl.Offset(0, 101).Value = Mid(Cl, i, Len(Cl))
PR = ""
ctr = 1
ElseIf IsNumeric(Mid(Cl, i, 1)) Then
NR = NR & Mid(Cl, i, 1)
End If
Next i
If Not ctr Then
NR = NR & Mid(Cl, i, 1)
Cl.Offset(0, 100).Value = NR
Cl.Offset(0, 101).Value = 0.1
NR = ""
End If
ctr = 0
Next Cl
Set Area = Nothing
Set Area = .Range("A1", .Range("CX1").End(xlDown))
Area.Sort Key1:=Range("CW1"), Order1:=xlAscending, Key2:=Range("CX1"), Order2:=xlAscending
Columns(101).ClearContents
Columns(102).ClearContents
Set Area = Nothing
End With
End Sub