Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ordinamento di stringhe alfanumeriche in tabella

328 views
Skip to first unread message

filigrana

unread,
Jun 10, 2019, 8:08:06 AM6/10/19
to
un saluto al gruppo.
ho googlato un po' ma non ho trovato soluzioni, anche se il problema mi
sembra piuttosto semplice.

ho creato una tabella con dati immessi a mano, che deve essere ordinata
su una colonna contenente semplici stringhe alfanumeriche del tipo
(esemplifico)
a1, a2, [...], a10, a11, [...]
b1, b2, [...], b10, b11, [...]

vorrei ordinare in senso alfa-numerico, cioè ordinando prima le lettere
e poi i numeri (questi ultimi, con l' ordinamento dei numeri naturali), cioè
a1-->a2-->[...]-->a9-->a10-->a11-->[...]
b1-->b2-->[...]-->b9-->b10-->b11-->[...]

se faccio eseguire l' ordinamento crescente excel mi restituisce invece
a1-->a10-->a11-->[...]-->a19-->a2-->a20-->a21-->[...]
b1-->b10-->b11-->[...]-->b19-->b2-->b20-->b21-->[...]

un grazie a chi mi risolve.

Junio

unread,
Jun 10, 2019, 5:38:32 PM6/10/19
to
se hai almeno la vesrione 2010 di excel: vai su ORDINAMENTO
PERSONALIZZATO, scegli la colonna e poi OK, ti presenterà una maschera
su cui scegli "ordina numeri e testo come testo separatamente"

filigrana

unread,
Jun 10, 2019, 7:50:50 PM6/10/19
to
il giorno Mon, 10 Jun 2019 23:38:23 +0200, Junio <utr...@gmail.com>
scriveva (msgid <qdmikk$8ad$1...@gioia.aioe.org>) nel gruppo
microsoft.public.it.office.excel circa Re: ordinamento di stringhe
alfanumeriche in tabella:

> se hai almeno la vesrione 2010 di excel:  vai su ORDINAMENTO
> PERSONALIZZATO, scegli la colonna e poi OK, ti presenterà una maschera
> su cui scegli "ordina numeri e testo come testo separatamente"

grazie della risposta.
ho la versione 2016, ma l' ordinamento personalizzato non lo vedo...
nel menù dati-ordina scelgo la colonna, il criterio (valore cella,
colore ecc.) e l' ordine (a-->z, z-->a, elenco personalizzato), ma nell'
elenco personalizzato mi fa inserire un elenco...per le lettere le posso
inserire tutte, ma per l' insieme dei numeri naturali elencarli tutti la
vedo dura...

ma mi sa che ho guardato dalla parte sbagliata, la maschera che dici tu
non mi appare...
saluti.



Bruno Campanini

unread,
Jun 10, 2019, 9:17:39 PM6/10/19
to
filigrana submitted this idea :
Se la tua serie alfanumerica è tutta del tipo che hai elencato
la soluzione non è molto complicata.
Perché Excel possa ordinare correttamente a1, a20, a12, a181...
occorre trasformare le stringhe in a001, a020, a012, a181...
ordinarle poi eliminare gli zeri che si sono premessi.
Ciò si può fare in vari modi: tabella supplementare con formule,
VBA, Array... quante sono le righe?

Bruno

filigrana

unread,
Jun 11, 2019, 4:50:45 AM6/11/19
to
il giorno Tue, 11 Jun 2019 03:17:36 +0200, Bruno Campanini
<brun...@libero.it> scriveva (msgid <qdmvfh$dvj$1...@dont-email.me>) nel
gruppo microsoft.public.it.office.excel circa Re: ordinamento di
stringhe alfanumeriche in tabella:

> Se la tua serie alfanumerica è tutta del tipo che hai elencato
> la soluzione non è molto complicata.
> Perché Excel possa ordinare correttamente a1, a20, a12, a181...
> occorre trasformare le stringhe in a001, a020, a012, a181...
> ordinarle poi eliminare gli zeri che si sono premessi.

infatti, ci avrei scommesso che aggiungendo zeri iniziali avrebbe
ordinato come mi serviva, solo che le stringhe alfanumeriche devono
rimanere quelle, quindi devo trasformarle come dici tu...

> Ciò si può fare in vari modi: tabella supplementare con formule,
> VBA, Array... quante sono le righe?

per ora ho dimensionato la tabella su 200 righe, non penso di andare
molto oltre...
dunque dovrei crearmi una colonna "helper" più o meno nascosta in quella
o altra tabella e trasformarmi le stringhe aggiungendo gli zeri
iniziali...hummmmm....
le stringhe sono di formato variabile, da 1 a 3 letterali seguiti da un
numero che per comodità possiamo definire da 1 a 999, del tipo quindi
a1, x11, y111
ab1, az22, aw999
abv1, aqs34, nbh235...
i 3 letterali sono messi a capocchia, non seguono alcuna regola, mentre
i numeri ordinano proprio i dati con uguale lettera, cioè
qr1, qr2, [...]
xy1, xy2, [...]
adesso ci penso un po' su...
grazie ciao.

Bruno Campanini

unread,
Jun 11, 2019, 6:06:32 AM6/11/19
to
filigrana explained :
Le mie considerazioni sono basate sui tuoi esempi di
un letterale + da 1 a 3 numeri.
Se anche i letterali possono essere in numero da 1 a 3,
allora non sono più valide.

Bruno

casanmaner

unread,
Jun 11, 2019, 6:18:31 AM6/11/19
to
Rubando una formula al buon Norman David Jons questa estrae i numeri da una stringa alfanumerica.
A partire da questa penso si potrebbe costruire la colonna di appoggio per eseguire l'ordinamento.

=SE.ERRORE(CERCA(1E+100;--STRINGA.ESTRAI(A1;PICCOLO(TROVA({0\1\2\3\4\5\6\7\8\9};A1&"0123456789");1);RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A1)))));"")

filigrana

unread,
Jun 11, 2019, 7:51:37 AM6/11/19
to
il giorno Tue, 11 Jun 2019 12:06:30 +0200, Bruno Campanini
<brun...@libero.it> scriveva (msgid <qdnuf7$mm9$1...@dont-email.me>) nel
gruppo microsoft.public.it.office.excel circa Re: ordinamento di
stringhe alfanumeriche in tabella:

> Le mie considerazioni sono basate sui tuoi esempi di
> un letterale + da 1 a 3 numeri.
> Se anche i letterali possono essere in numero da 1 a 3,
> allora non sono più valide.

sì avevo fatto un esempio molto vago perchè pensavo che la soluzione
fosse più semplice; una volta che abbiamo iniziato a parlare di formule
sono andato nello specifico così non stiamo a perdere tempo...
avevo visto anche questa soluzione che mi sembrava buona
https://www.extendoffice.com/it/documents/excel/2701-excel-separate-text-and-numbers.html
nel metodo 3 definisce una funzione utente in VBA che estrae i letterali
se messa a falso e i numerici se messa a vero, peccato che non mi
funzioni...cacchio c' era da mettere il ";" al posto della ",", ma si
può?, e adesso funziona.
la macro estrae le lettere e le piazzo in una colonna, poi estrae i
numeri e li piazzo in un' altra colonna, ordino per le due colonne
helper e sono a posto.
per la cronaca il VBA è questo:

Public Function SplitText(pWorkRng As Range, pIsNumber As Boolean) As String
'Updateby Extendoffice
Dim xLen As Long
Dim xStr As String
xLen = VBA.Len(pWorkRng.Value)
For i = 1 To xLen
xStr = VBA.Mid(pWorkRng.Value, i, 1)
If ((VBA.IsNumeric(xStr) And pIsNumber) Or (Not
(VBA.IsNumeric(xStr)) And Not (pIsNumber))) Then
SplitText = SplitText + xStr
End If
Next
End Function

forse è un po' grezza come soluzione ma si può affinare...
grazie ciao.
0 new messages