Condividi:        

Velocizzare ordinamento di tante righe con valori e formule

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

Velocizzare ordinamento di tante righe con valori e formule

Postdi ricky53 » 28/05/24 18:19

Ciao a tutti,
eccomi qui ad esporre una nuova necessità.

Ho un foglio contenente diverse migliaia di righe, oggi sono poco meno di 4.000 ma sono destinate ad aumentare nel tempo.
I dati, senza formule, vanno dalla colonna “A” alla colonna “M”
Dalla colonna “N” fino alla colonna “X” ci sono formule semplici, tipo “SE”, “Anno”, “Mese”, “Concatenamenti”.

I nuovi dati vengono accodati a quelli esistenti.

Dopo aver inserito i nuovi dati devo effettuare l’ordinamento di tutti i dati presenti dalla colonna “A” alla colonna “M”, le altre contenenti formule non necessitano di ordinamento.
I dati vanno ordinati prima per colonna “A” (contiene una data), poi “E” (contiene una stringa di testo) ed infine per la colonna “I” (contiene un importo).

Prima condizione: i valori inseriti nelle varie righe possono avere date che sono minori dell’ultima data inserita, quindi, le nuove righe andranno a posizionarsi tra le altre righe già esistenti.

L’ordinamento lo faccio con una semplice macro che fa le seguenti azioni:
1. Toglie l’eventuale filtro eventualmente applicato ad una o più colonne
2. Ordina l’intervallo “A-M” con la funzione “Sort” del VBA
Ad oggi con le righe attualmente inserite il tempo di elaborazione è di circa 8-9 secondi.
Non è tanto ma neanche poco e devo dire che l’utilizzatore non è molto contento di questa attesa.
Ho provato con 15.000 righe ed il tempo è diventato 55-60 secondi che è una ETERNITA’

La mia richiesta è:
c’è un altro modo per rendere veloce le operazioni fatte al punto 1 ed al punto 2?
Forse con un ordinamento fatto in una array che viene caricata con i dati dall’intervallo A-M e a fine ordinamento copia la matrice nell’intervallo di partenza?
Si accetta qualunque soluzione che sia più veloce di quella attuale.

Grazie a tutti


Questo è il semplice codice che utilizzo
Codice: Seleziona tutto
    Inizio = Timer

    Application.ScreenUpdating = False
   
    Selection.AutoFilter Field:=2, Criteria1:="<>"
    ActiveSheet.ShowAllData
    UR = Range("B" & Rows.Count).End(xlUp).Row
    Range("A10:M" & UR).Select
     Selection.Sort Key1:=Range("B11"), Order1:=xlAscending, Key2:=Range("E11" _
            ), Key3:=Range("I11"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
            :=xlSortNormal
    Application.ScreenUpdating = True

    Fine = Timer
    MsgBox "Elaborazione effettuata in " & Format(Fine - Inizio, "0.000") & " secondi"
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-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Sponsor
 

Re: Velocizzare ordinamento di tante righe con valori e form

Postdi Anthony47 » 29/05/24 01:21

Quando si eliminano o si mettono i filtri il foglio viene ricalcolato; per capire quanto del tempo necessario alle operazioni e' dovuto al ricalcolo iniziale prova ad aggiungere Application.Calculation = xlCalculationManual in testa alla macro, riportando poi il calcolo in Automatico alla fine, e vediamo l'impatto che ha.
Avatar utente
Anthony47
Moderatore
 
Post: 19432
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Velocizzare ordinamento di tante righe con valori e form

Postdi ricky53 » 29/05/24 22:32

Ciao,
ho provato il tuo suggerimento e .... adesso i tempi sono 2-3 secondi.

Direi che va più che bene.

Per il momento chiudiamo così.
Se dovessero, all'aumentare delle righe, aumentare di molto i tempi mi farò rivedere qui.

Grazie ancora Anthony, sei sempre risolutivo.

P.S.: Ho tolto tutte le formule e i tempi sono 0,2-0,5 secondi. Quindi il ricalcolo assorbe 1,8-2,5 secondi.
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-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "Velocizzare ordinamento di tante righe con valori e formule":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti