ORDINAMENTO RIGHE COMPLESSO



  • 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