ORDINAMENTO RIGHE COMPLESSO
Hai un problema con Excel? 
ORDINAMENTO RIGHE COMPLESSO
di Marco (utente non iscritto) data: 09/01/2013 18:56:04
buonasera a tutti, avrei un problema x veri intenditori... ho un elenco di 3000 nominativi con nome cognome e data (tre colonne)e mi è stato chiesto di ordinarlo, praticamente devo ordinare dalla data più vecchia a quella più nuova ma poi se il nome ha più date mi devono comparire insieme
esempio:
Caio Marco 11-03-2011
pinco luca 05-05-2011
pallone Flavio 02-09-2008
camera daria 04-02-2009
caio Marco 02-10-2008
camera daria 08-07-2013
caio Marco 05-06-2013
ordino x data e viene
pallone Flavio 02-09-2008
caio Marco 02-10-2008
camera daria 04-02-2009
caio Marco 11-03-2011
pinco luca 05-05-2011
caio Marco 05-06-2013
camera daria 08-07-2013
xò dato che caio Marco ha tre date mi devono comparire insieme nella data più vecchia in modo da aver sott'occhio tutte le date così come camera daria quindi devo ottenere
pallone Flavio 02-09-2008
caio Marco 02-10-2008
caio Marco 11-03-2011
caio Marco 05-06-2013
camera daria 04-02-2009
camera daria 08-07-2013
pinco luca 05-05-2011
che fa riferimento è la data più vecchia, appurata quella poi devo veder subito le altre a parità di cognome nome! help!
di Vecchio Frac data: 09/01/2013 19:18:43
Io ho lavorato così ottenendo il risultato voluto:
- ho ordinato per data in ordine crescente (la più antica in cima, la più recente in fondo)
- ho aggiunto un'ulteriore colonna "num" all'elenco così ordinato
- ho cominciato a mettere dei numeri progressivi in tale colonna "num", tale che ad ogni cambiamento di cognome il numero aumenta (quindi cognomi uguali, numero uguale)
- infine ho riordinato la tabella per "num" ottenendo il risultato voluto
- la colonna finale "num" si può eliminare.
Concettualmente il ragionamento è facile e funziona; anche in pratica lo è, solo che bisogna stare attenti affinchè cognomi uguali abbiano lo stesso codice "num". Bisogna automatizzare solo la numerazione della colonna di appoggio "num". Nei giorni scorsi ho pubblicato su uno di questi post una piccola procedura che trova dei duplicati entro una tabella. Se ho un briciolo di tempo butto giù una soluzione.
Se qualcuno ha da proporre un algoritmo diverso, ben venga :)
di Marco (utente non iscritto) data: 09/01/2013 19:34:25
ottima soluzione....non sono troppo pratico... come faccio a inserire un numero che cambia con il cambio cognome? se mi scrivi in superpelo@libero.it ti invio il file,almeno imparo una volta per tutte!comunque grazie veramente!
di Vecchio Frac data: 09/01/2013 21:01:10
Ho avuto un attimo per buttare giù questo codice.
Copia incolla in un modulo e lancia la sub.
Condizioni per il funzionamento:
- la tabella deve iniziare in A1
- A1 = "cognome", B1 = "nome", C1 = "data", colonna D: vuota
- non devono esserci righe vuote nella tabella (altrimenti l'ordinamento si arresta alla prima riga vuota)
Il codicino fa in automatico quello che ho esposto prima a parole, quindi alla fine avrai l'ordinamento richiesto e la colonna d'appoggio non la vedrai nemmeno.
Option Explicit
Sub order_list()
Dim rng As Range, c As Range, cella As Range, firstaddress, f As Long, i As Integer
[D:D].ClearContents
[D1] = "num"
Set rng = [A1].CurrentRegion
rng.Sort key1:="data", order1:=xlAscending, header:=xlYes
For Each cella In rng.Offset(1).Resize([COUNTA(A:A)] - 1, 1)
f = 0
With rng
Set c = .Find(cella, LookIn:=xlValues)
If Not c Is Nothing And c.Offset(, 3) = "" Then
f = f + 1
i = i + 1
c.Offset(, 3) = i
If f > 0 Then
firstaddress = c.Address
Do
c.Offset(, 3) = i
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End If
End With
Next
rng.Sort key1:="num", order1:=xlAscending, header:=xlYes
[D:D].Delete
End Sub |
di Vecchio Frac data: 09/01/2013 21:02:35
cit. " come faccio a inserire un numero che cambia con il cambio cognome? "
---> a mano :)
cit. " se mi scrivi in superpelo@libero.it "
---> preferisco postare la mia soluzione qui così la vedono tutti.
In ogni caso la possibilità di allegare qui un file (compresso) c'è.
di Marco (utente non iscritto) data: 09/01/2013 21:23:10
io ho fatto visual basic,nuovo modulo ho copiato...poi sono tornato in excel ho fatto macro,esegui... e mi dice...
"impossibile eseguire ilcodice in modalità interruzione" e mi visualizza in giallo
rng.Sort key1:="data", order1:=xlAscending, Header:=xlYes
che casino!
comunque grazie a tutti!
di Vecchio Frac data: 09/01/2013 21:31:14
Ti allego un piccolo file di esempio.
Clicca sul pulsante per avviare la macro che si trova in un modulo pubblico.
di Marco (utente non iscritto) data: 09/01/2013 22:15:19
risolto!grazie mille a tutti!
di Vecchio Frac data: 10/01/2013 09:12:10
Se pensi di aver risolto, per cortesia fai una nuova risposta e clicca sulla casella "Spunta se risolta", grazie.
di Marco (utente non iscritto) data: 10/01/2013 20:02:58
grazie a tutti
Vuoi Approfondire?