Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 16 su 16

Raggruppa e/o elimina righe con macro

  1. #11
    Sgrubak non è in linea Scribacchino
    Post
    523
    Like Inviati  
    9
    Like Ricevuti  
    2
    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    In VBA ho solo tre macro.
    Allora mi sento di suggerirti in via prioritaria l'utilizzo delle proprietà di cui al post #7. Vedrai che probabilmente togli anche quei due secondi.
    Credo che i lunghi ritardi nella prima cartella, siano dovuti al fatto che l'eliminazione della riga, scateni il ricalcolo del foglio, se non addirittura dell'intera cartella. In pratica ti ricalcola tutte le formule ad ogni cancellazione, quando a te basta che il ricalcolo venga eseguito solo dopo aver effettivamente eliminato le righe vuote ed accorpato i vari valori...

    Alla peggio si può pensare di ottimizzare il codice, riducendo le Sub ad una sola, con un solo ciclo For ascendente e poi gestire i possibili casi di eliminazione e raggruppamento. Nella mia esperienza, scorrere grossi Range coi cicli è sempre molto lento, quindi preferisco ridurli al minimo.

  2. #12
    surfgarden non è in linea Scolaretto
    Post
    146
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Allora mi sento di suggerirti in via prioritaria l'utilizzo delle proprietà di cui al post #7. Vedrai che probabilmente togli anche quei due secondi.
    Ho provato su 5000 righe, di cui 2134 soggette a eliminazione.
    La Sub EliminaPolli_e_SommaPecore() resta praticamente istantanea (neanche 1 secondo), mentre la Sub Cancella_riga_su_colonna_vuota() impiega 1 minuto e mezzo.
    Con la tua proprietà Sub FiltraERaggruppa() (ottima!!!) il tempo si è ridotto a 11 secondi.
    Stesso risultato per la velocità di eliminazione righe l'avevo comunque ottenuto con quest'altro codice
    Application.ScreenUpdating = False
    For i = Range("Q" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Cells(i, 17) = "" Then
            Rows(i).Delete
        End If
    Next
    Application.ScreenUpdating = True
    
    che, oltre ad essere più "snello" del precedente, anch'esso infatti utilizza la proprietà Application.ScreenUpdating

    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Credo che i lunghi ritardi nella prima cartella, siano dovuti al fatto che l'eliminazione della riga, scateni il ricalcolo del foglio, se non addirittura dell'intera cartella. In pratica ti ricalcola tutte le formule ad ogni cancellazione, quando a te basta che il ricalcolo venga eseguito solo dopo aver effettivamente eliminato le righe vuote ed accorpato i vari valori...
    In realtà il foglio in cui incollo speciale i soli valori, non ha alcun collegamento col resto della cartella, per cui le righe eliminate non dovrebbero produrre alcun effetto sugli altri fogli.
    Il ricalcolo continuo effettivamente avviene, tant'é che se interrompo con esc durante le prime righe di scrittura, mi dà errore sulla Function ConfrontaInverso, come da immagine:
    https://imgur.com/WWuMjqX

    Qui però non sono assolutamente all'altezza di provare ad intervenire..

  3. #13
    surfgarden non è in linea Scolaretto
    Post
    146
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    ..Qui però non sono assolutamente all'altezza di provare ad intervenire..
    ...e invece si!

    RISOLTO !
    Ho applicato la proprietà ScreenUpdating anche alla funzione (..magari lì non serve a nulla) e utilizzata nella cartella originaria con le macro "raggruppate"


    Ora tutto ok!!
    Circa un secondo per ciclare, raggruppare ed eliminare le righe vuote, su 500 righe totali


  4. #14
    Sgrubak non è in linea Scribacchino
    Post
    523
    Like Inviati  
    9
    Like Ricevuti  
    2
    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    ...Ho applicato la proprietà ScreenUpdating anche alla funzione (..magari lì non serve a nulla) e utilizzata nella cartella originaria con le macro "raggruppate"...
    Credo anche io che non serva a nulla. Sicuramente Excel sa già che, durante il ricalcolo del foglio, non deve aggiornare lo schermo.

    Quote Originariamente inviato da surfgarden Visualizza il messaggio
    ...Il ricalcolo continuo effettivamente avviene, tant'é che se interrompo con esc durante le prime righe di scrittura, mi dà errore sulla Function ConfrontaInverso, come da immagine...
    Qui non ti da errore. Interrompe semplicemente l'esecuzione del codice, come se andassi in debug. Il fatto che si interrompa sempre sulla funzione personalizzata, è proprio indicatore del fatto che ad ogni eliminazione, ricalcola il foglio intero. Bloccando il ricalcolo prima di lanciare il loop di eliminazione e poi riattivandolo, ricalcoli le formule una volta soltanto al posto di farlo dopo ogni eliminazione.

  5. #15
    surfgarden non è in linea Scolaretto
    Post
    146
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Bloccando il ricalcolo prima di lanciare il loop di eliminazione e poi riattivandolo, ricalcoli le formule una volta soltanto al posto di farlo dopo ogni eliminazione.
    ..cosa che ottengo con la Proprietà Application.Calculation, impostandola prima a Manual, e tornando dopo l'eliminazione righe in Automatic, giusto?

    Grazie anche per questo chiarimento

  6. #16
    Sgrubak non è in linea Scribacchino
    Post
    523
    Like Inviati  
    9
    Like Ricevuti  
    2
    Esattamente!

+ Rispondi al messaggio
Pagina 2 di 2 primaprima 12

Potrebbero interessarti anche ...

  1. Raggruppa e conta
    Da Lelec nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 08-08-2017, 18:36
  2. Risposte: 21
    Ultimo Post: 18-11-2014, 22:36
  3. Elimina riga e righe vuote
    Da M4ndr4k377 nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 04-10-2014, 23:07
  4. Velocizzare macro elimina righe
    Da pablo.carnevali nel forum Microsoft Excel
    Risposte: 6
    Ultimo Post: 25-03-2014, 23:19
  5. elimina righe uguali
    Da pricious nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 08-06-2005, 16:53