RIMUOVE RIGHE CONFRONTANDO VALORE 0



  • RIMUOVE RIGHE CONFRONTANDO VALORE 0
    di vatuss (utente non iscritto) data: 15/07/2017 09:00:21

    Buon giorno forum. Allo scopo di rendere più efficiente il mio lavoro vorrei sapere se è possibile costruire una macro che controlli la colonna Q del foglio e se trova un valore uguale a 0 o negativo (per es. : -55) lo confronta con la colonna N e se uguale a 0 o negativo e rimuovere la riga.

    Con il codice che segue (non è farina del mio sacco) ottengo la stessa operazione sulla colonna M senza alcun controllo

    Sub EliminaZeri()
    Columns("M:M").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="0"
    Rows("2:65000").Select
    Selection.Delete Shift:=xlUp
    Selection.AutoFilter
    Range("M2").Select
    End Sub

    Spero ci sia una soluzione, grazie.



  • di patel data: 15/07/2017 10:50:46

    prova questa
     
    Sub a()
    LR = Cells(Rows.Count, "Q").End(xlUp).Row
    For r = LR To 1 Step -1
      If Cells(r, "Q") <= 0 And Cells(r, "N") <= 0 Then Rows(r).Delete
    Next
    End Sub






  • di vatuss (utente non iscritto) data: 15/07/2017 18:54:57

    grazie per la risposta Patel, la macro inizia a eseguire ma lo ripete sempre senza rimuovere le righe e senza mai fermarsi.



  • di vatuss (utente non iscritto) data: 15/07/2017 20:14:28

    Ciao patel chiedo venia ma mi sono sbagliato,
    la macro è perfetta anche se ha impiegato circa 15 minuti a cercare nelle 3000 righe che presto diventeranno almeno il doppio.
    E' forse possibile velocizzarla?
    Buona serata e grazie mille



  • di Vecchio Frac data: 15/07/2017 22:03:36

    Quindici minuti, mi sembra un'esagerazione.
    Disabilita il calcolo automatico e il refresh dello schermo.





  • di Vecchio Frac data: 15/07/2017 22:30:39

    Potresti costruire due righe di VBA che impostino un AdvancedFilter basato su due celle contigue di criteri e poi selezionare d'un botto le sole celle visibili per eliminare l'intera riga. Velocissimo.
    Nell'esempio che segue:
    A1 intestazione primo campo da controllare (etichetta colonna Q)
    B1 intestazione secondo campo da controllare (etichetta colonna N)
    A2 scrivi "< 0" (senza spazi e virgolette)
    B2 scrivi "< 0" (senza spazi e virgolette)
    Ora seleziona A1:B2 e definisci il nome "criteri". I dati iniziano dopo una riga vuota e cioè da A4; in riga 4 ci sono quindi le intestazioni delle colonne e da riga 5 i dati veri e propri. Avvia la macro (i dati vengono eliminati quindi lavora su una copia! :) )

     
    Option Explicit
    
    Sub find_delete()
        Range("A4:Q200000").AdvancedFilter xlFilterInPlace, criteriarange:=Range("criteri")
        Range("A5:Q200000").SpecialCells(xlCellTypeVisible).EntireRow.Delete
        ActiveSheet.ShowAllData
    End Sub
    






  • di vatuss (utente non iscritto) data: 16/07/2017 22:04:37

    Grazie Patel e Vecchio Frac siete stati molto cortesi a darmi una mano.