Condividi:        

Ordinare dati in excell

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Ordinare dati in excell

Postdi hayabusa_65 » 18/10/10 10:55

Buongiorno a tutti,
ho un problema in excell che non riesco a risolvere e chiedevo se qualcuno può darmi un consiglio.
Ho una tabella supponiamo con due colonne
Nome Importo
Pippo 1400
Pippo 1200
Pippo 600
Pluto 1500
Pluto 1200
Pluto 600
Pluto 450
Paperino 1800
Paperino 1000
Paperino 750
Paperino 100
Devo ordinarle per il nome con l'importo maggiore (Paperino) elencando tutte le righe di paperino
quindi individuare il secondo (pluto) elencando tutte le righe del secondo e così via.
Il risultato finale dovrebbe quindi essere questo:
Nome Importo
Paperino 1800
Paperino 1000
Paperino 750
Paperino 100
Pluto 1500
Pluto 1200
Pluto 600
Pluto 450
Pippo 1400
Pippo 1200
Pippo 600
Qualcuno mi può aiutare?
Grazie a tutti.
hayabusa_65
Utente Junior
 
Post: 29
Iscritto il: 18/10/10 10:43

Sponsor
 

Re: Ordinare dati in excell

Postdi maxmula » 18/10/10 13:18

Seleziona le celle da ordinare (intestazioni di riga e valori numerici)

Menu Dati/Ordina
"Ordina per:" => metti la colonna in cui si trovano le intestazioni; specifica se vuoi ordine crescente o decrescente.
"Quindi per:" => metti la colonna in cui si trovano i valori; specifica se vuoi ordine crescente o decrescente.


Ciao!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Re: Ordinare dati in excell

Postdi ricky53 » 18/10/10 13:36

Ciao hayabusa_65,
benvenuto nel forum.

Maxmula: non è un semplice ordinamento per due campi.

Lui vuole ordinare in modo particolare:
1. ordinati per importo decrescente poi gli altri dati devono avere lo stesso nome del primo,
2. quindi secondo importo maggiore e i dati sotto con lo stesso nome del secondo
3. poi terzo importo maggiore ...
4. ...
5 ...

Altrimenti perchè "Pluto" (1500) è prima di "Pippo" (1400) e “Paperino” è il primo di tutti (1800) ???

E' così?

E' un ordinamento di cui non “capisco” l’applicazione, ma attendiamo chiarimenti.

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Ordinare dati in excell

Postdi hayabusa_65 » 18/10/10 14:09

Vi ringrazio per l'interessamento.
Ho bisogno di conoscere quali sono i soggetti (circa 50) che hanno l'importo maggiore e quindi il dettaglio dei singoli importi riferiti a quel soggetto.
Quindi devo individuare quello che ha l'importo maggiore e elencare tutte le sue righe, il secondo, e quindi le sue righe il terzo..... e così via.
Grazie a chiunque mi darà un consiglio
hayabusa_65
Utente Junior
 
Post: 29
Iscritto il: 18/10/10 10:43

Re: Ordinare dati in excell

Postdi ricky53 » 18/10/10 14:45

Ciao,
ordinamento particolare ...

con le formule la vedo difficile.

con una macro forse.

Essendo i nomi solo 50 proporrei, in attesa di venti migliori, di fare un ordinamento manuale con due colonne di appoggio:
1. ordini per importo decrescente e nella prima colonna metti 1,2,3,4,5,6, ….
2. ordini per nome crescente , nella seconda colonna di appoggio metti i sub: a parità di società 1-a, 1-b, 1-c , 1-d,...
3. sempre nella colonna di appoggio, nel secondo maggior importo metti 2-a, 2-b, 2-c, 2-d, ..., 3-a, 3-b, 3-c, 3-d, ..., ecc. fino alla fine dei dati
4. ordini per questa colonna.

Artigianale ma funzionante.
Attendiamo soluzioni più professionali.

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Ordinare dati in excell

Postdi hayabusa_65 » 18/10/10 15:15

Ti ringrazio per la risposta.
Purtroppo però i nominativi sono destinati a crescere e gli importi per ogni nominativo pure per cui la soluzione che mi proponi, ottima sotto l' aspetto concettuale, mi è un pò problematica da usare.
Ciao e grazie ugualmente
hayabusa_65
Utente Junior
 
Post: 29
Iscritto il: 18/10/10 10:43

Re: Ordinare dati in excell

Postdi ricky53 » 18/10/10 15:35

Ciao,
al momento non trovo nulla di meglio.

Ci penserò ma ...

Ciao d Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Ordinare dati in excell

Postdi ricky53 » 18/10/10 17:51

Ciao,
con le formule non ne sono uscito.

Prova questa macro con queste ipotesi
1. i dati da ordinare sono in colonna "A" (Nomi) e "B" (Importi)
2. vengono utilizzate le colonne "C", "D", ed "E" come colonne di appoggio ed i dati presenti in queste colonne verranno cancellati.

Codice: Seleziona tutto
Option Explicit
Public I As Integer, J As Integer, RR As Integer

Sub Ordina_Speciale()
' ATTENZIONE la macro utilizza le colonne "C",  "D",  ed  "E" come colonne di appoggio
' in queste colonne i dati verranno cancellati
   
    Application.ScreenUpdating = False
    RR = Range("A" & Rows.Count).End(xlUp).Row
    Range("C:E").ClearContents

' Ordinamento per Importo decrescente
    Range("A1:B" & RR).Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
   
' Progressivo di Importo
    For I = 2 To RR
        Cells(I, 3) = I - 1
    Next I
   
' Ordinamento Società e per Importo decrescente
    Range("A1:C" & RR).Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
        , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
   
' Progressivo di Società
    J = 1
    For I = 3 To RR + 1
        Cells(I - 1, 4) = J
        If UCase(Cells(I, 1)) = UCase(Cells(I - 1, 1)) Then
            J = J + 1
        Else
            J = 1
        End If
    Next I
    J = Cells(2, 3)
   
' Progressivo di Importo-società
    For I = 2 To RR
        Cells(I, 5) = Format(J, "00000") & "-" & Format(Cells(I, 4), "00000")
        If UCase(Cells(I, 1)) <> UCase(Cells(I + 1, 1)) Then
            J = Cells(I + 1, 3)
        End If
    Next I
   
' Ordinamento per risultato finale
    Range("A1:E" & RR).Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
   
    Range("C:E").ClearContents
    Application.ScreenUpdating = True
   
    MsgBox "Ordinamento dati effettuato"
End Sub


La macro è in parte commentata,
per aprire l'editor del VBA "Alt+F11",
per eseguire la macro "F5"

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Ordinare dati in excell

Postdi Anthony47 » 19/10/10 02:26

Guarda e prova la soluzione di Ricky nel messaggio precedente.

Con formule, usando una colonna di appoggio, ad esempio la D:
-i dati cominciano in riga 2, col A=Nome, col B=Importo
-in D2 metti la formula
Codice: Seleziona tutto
=B2-RIF.RIGA()/1000000
e copi verso il basso
-in E2
Codice: Seleziona tutto
=GRANDE(D2:D2000;1)

-in E3
Codice: Seleziona tutto
=SE(CONTA.SE(F$2:F2;F2)>=CONTA.SE($A$2:$A$2000;F2);GRANDE(SE(VAL.ERRORE(CONFRONTA(D$2:D$2000;E$2:E2;0));D$2:D$2000;"");1);GRANDE(D$2:D$2000*(A$2:A$2000=F2);CONTA.SE(F$2:F2;F2)+1))
Da confermare con Contr-Maiusc-Enter; poi copi verso il basso
-in F2
Codice: Seleziona tutto
=INDICE(A$2:A$2000;CONFRONTA(E2;D$2:D$2000;0))
e copi verso il basso

La col D e' usata per risolvere gli eventuali "pari valori"; in questo caso sara' considerato maggiore il valore/nominativo prima nella lista; le formule inseriscono un delta valore che dopo 1000 righe sara' pari a 0,001. Va valutato se cio' ha un impatto sui tuoi dati.
Le formule sono per un elenco fino a riga 2000, eventualmente modificare per gestire elenchi piu' lunghi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Ordinare dati in excell

Postdi ricky53 » 19/10/10 12:07

Ciao,

ed io che pensavo che con le macro si potesse fare tutto !!!

COMPLIMENTI Anthony !!!

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Ordinare dati in excell

Postdi Anthony47 » 19/10/10 13:24

Diciamo che con le formule si puo' fare molto, col vba moolto di piu' e spesso con minore sofferenza.
Ma intanto aspettiamo l' esito delle prove dell' utente.

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Ordinare dati in excell

Postdi ricky53 » 19/10/10 15:01

Ciao,
stimolato dalla piacevole ed intrigante soluzione di Anthony ho provato ad ottimizzare quanto avevo proposto prima.

Ecco una nuova soluzione al quesito di hayabusa_65

Codice: Seleziona tutto
Option Explicit
Public I As Integer, RR As Integer, Nome_Appoggio As String, Massimo As Integer

Sub Ordina_Speciale()
' ATTENZIONE la macro utilizza la colonna "C" come colonna di appoggio
' in questa colonna i dati verranno cancellati
   
    Application.ScreenUpdating = False
    Foglio4.Select
    RR = Range("A" & Rows.Count).End(xlUp).Row

' Ordinamento Società e per Importo decrescente
    Range("A1:C" & RR).Sort Key1:=Range("A2"), Order1:=xlAscending, key2:=Range("B2") _
        , order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
   
' Elabora utilizziando una colonna di appoggio (colonna "C") che contiene i Massimi Importi per Società
    Dim Nome_Appoggio As String
    Dim Massimo As Integer
    Nome_Appoggio = Cells(1, 1)
    Massimo = -1
    For I = 1 To RR
        If UCase(Cells(I, 1)) <> UCase(Nome_Appoggio) Then
            Nome_Appoggio = Cells(I, 1)
            Massimo = Cells(I, 2)
        End If
        Cells(I, 3) = Massimo
    Next
   
' Ordinamento per Massimo Importo , per Società
    Range("A1:C" & RR).Sort Key1:=Range("C2"), Order1:=xlDescending, key2:=Range("A2") _
        , order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
   
    Range("C:C").ClearContents
    Application.ScreenUpdating = True
   
    MsgBox "Ordinamento dati effettuato"
End Sub



e' più veloce ed ho eliminato due colonne di appoggio e quindi sono stati eliminati due cicli elaborativi.

Come già detto non resta che attendere il nostro utente.

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Ordinare dati in excell

Postdi hayabusa_65 » 20/10/10 11:48

Scusate il silenzio di ieri, ma sono stato fuori ufficio tutto il giorno.
Volevo solo ringraziarvi perché siete stati spettacolari,
soluzioni eccezionali tutte e due.
complimenti ancora e grazie per l'aiuto.
hayabusa_65
Utente Junior
 
Post: 29
Iscritto il: 18/10/10 10:43

Re: Ordinare dati in excell

Postdi hayabusa_65 » 21/10/10 14:14

Buongiorno a tutti
Finalmente oggi sono riuscito a testare le soluzioni che mi avete proposto
Devo dire che quella di antony mi ha dato degli errore che non sono riuscito a risolvere, sicuramente sono io che sbaglio qualcosa e me ne scuso con l'autore.
Quella di Riky funziona perfettamente, l'unica cosa ho dovuto cambiare la dichiarazione della variabile massimo trasformandola da integer a variant in quanto i valori da ordinare sono grandi.
Grazie ancora a tutti e due.
hayabusa_65
Utente Junior
 
Post: 29
Iscritto il: 18/10/10 10:43

Re: Ordinare dati in excell

Postdi ricky53 » 21/10/10 14:35

Ciao,
"Variant" occupa più spazio in memoria, utilizzia "Long".

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "Ordinare dati in excell":


Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti