Risultati da 1 a 12 di 12

Discussione: Eliminare piu' righe contemporeanamente con macro



  1. #1
    L'avatar di kellington90
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    Italia
    Messaggi
    31
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    2

    Eliminare piu' righe contemporeanamente con macro

    Salve, ho una tabella con tot righe variabili. E' possibile eliminare tutte le righe che contengono, in una determinata colonna, un valore specifico (ad esempio " 0 " ) ?

    Immaginate:

    Colonna1---Colonna2---Colonna3
    prova1---------0-----------a
    prova2---------2-----------b
    prova3---------0-----------c


    La macro dovrebbe eliminare contemporeanamente la riga contenente prova1 e prova3 (poichè nella colonna2 è presente il numero 0)

    Vi ringrazio

  2. #2

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4016
    Versione Office
    2013
    Likes ricevuti
    1225
    Likes dati
    923

    Re: Eliminare piu' righe contemporeanamente con macro

    Ciao,
    supponendo che la colonna con i valori da verificare sia la "B", potresti scrivere così:

    Codice: 
    Sub Elimina_Righe()
    Dim i As Long
    
    
    For i = 9 To 1 Step -1
        If Range("B" & i).Value = 0 Then
            Range("B" & i).EntireRow.Delete
        End If
    Next i
    End Sub
    File Allegati File Allegati

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  3. #3
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3339
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49

    Re: Eliminare piu' righe contemporeanamente con macro

    Ciao Kellington

    Aggiungo a quanto scritto da Cromagno (un ciao a te) se sono righe variabili :

    Codice: 
    Sub Elimina_Righe()
    
    Dim uriga As Long
    Dim i As Long
    
    
    uriga = Range("A" & Rows.Count).End(xlUp).Row
    For i = uriga To 1 Step -1
        If Range("B" & i).Value = 0 Then
            Range("B" & i).EntireRow.Delete
        End If
    Next i
    End Sub

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  4. #4
    L'avatar di kellington90
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    Italia
    Messaggi
    31
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    2

    Re: Eliminare piu' righe contemporeanamente con macro

    Grazie mille a entrambi.. mi chiedevo se esistesse una procedura istantanea, senza dover utilizzare il For i che rallenta (e a volte blocca) excel quando si tratta di molte righe..

  5. #5
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    45
    Messaggi
    737
    Versione Office
    Excel 2010
    Likes ricevuti
    257
    Likes dati
    215

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da kellington90 Visualizza Messaggio
    Grazie mille a entrambi.. mi chiedevo se esistesse una procedura istantanea, senza dover utilizzare il For i che rallenta (e a volte blocca) excel quando si tratta di molte righe..
    prova così
    Codice: 
    Sub Elimina_Righe()
        With Range("A1").CurrentRegion
    .AutoFilter Field:=2, Criteria1:="0" .Offset(1).EntireRow.Delete .AutoFilter Field:=2 .AutoFilter
    End With End Sub
    saluti
    gg

    ----------Post unito in automatico----------

    così è meglio ;-)

    Codice: 
    Sub Elimina_Righe()
    Dim numRows As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        With Range("A1").CurrentRegion
        .AutoFilter Field:=2, Criteria1:="0"
        numRows = .SpecialCells(xlCellTypeVisible).Count / .Columns.Count
        If numRows > 1 Then
        .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
        End If
        .AutoFilter Field:=2
        .AutoFilter
        End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    saluti
    gg

  6. #6
    L'avatar di kellington90
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    Italia
    Messaggi
    31
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    2

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da ggratis Visualizza Messaggio
    prova così
    Codice: 
    Sub Elimina_Righe()
        With Range("A1").CurrentRegion
    .AutoFilter Field:=2, Criteria1:="0" .Offset(1).EntireRow.Delete .AutoFilter Field:=2 .AutoFilter
    End With End Sub
    saluti
    gg

    ----------Post unito in automatico----------

    così è meglio ;-)

    Codice: 
    Sub Elimina_Righe()
    Dim numRows As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        With Range("A1").CurrentRegion
        .AutoFilter Field:=2, Criteria1:="0"
        numRows = .SpecialCells(xlCellTypeVisible).Count / .Columns.Count
        If numRows > 1 Then
        .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
        End If
        .AutoFilter Field:=2
        .AutoFilter
        End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    saluti
    gg

    Grazie !! E' esattamente ciò che cercavo... senza nulla da togliere alle altre due soluzioni che funzionano lo stesso, ma questa è piu immediata e "spreca" meno risorse!
    Ti chiedo un ultima cosa: se dovessei impostare una variabile per quanto riguarda quell'auto filter, come dovrei fare? Mi spiego: anzichè eliminare tutte le righe contenenti 0 nel Field2, vorrei eliminare tutte le righe che contengono un valore MINORE di Range("F1").Value . Immagino quindi che vada cambiata quella linea di codice dove filtra, ma come diventa la sintassi? Grazie ancora

  7. #7

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4016
    Versione Office
    2013
    Likes ricevuti
    1225
    Likes dati
    923

    Re: Eliminare piu' righe contemporeanamente con macro

    Ciao a tutti,

    premettendo che il metodo usato da ggratis (un saluto) è sicuramente più pratico....

    ritornando al "ciclo", puoi farlo eseguire senza agire fino alla fine e solo per ultimo elimini tutte le righe insieme.

    Tenendo presente quello che hai specificato prima:
    anzichè eliminare tutte le righe contenenti 0 nel Field2, vorrei eliminare tutte le righe che contengono un valore MINORE di Range("F1").Value .
    Il codice diventerebbe:

    Codice: 
    Sub Elimina_Righe()
    Dim uRiga As Long, i As Long, Righe As Range
    
    
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    For i = uRiga To 1 Step -1
        If Range("B" & i) < [F1] Then
            Set Righe = Range("B" & i)
            uRiga = Range("B" & i).Row
            GoTo processo
        End If
    Next i
    
    
    processo:
    For i = uRiga To 1 Step -1
        If Range("B" & i).Value < [F1] Then
            Set Righe = Union(Righe, Range("B" & i))
        End If
    Next i
    If Not Righe Is Nothing Then
        Righe.EntireRow.Delete
    End If
    End Sub
    Attento che se il valore in cella B1 è minore di F1, ti verrà cancellata anche quella riga e quindi anche il tuo valore di riferimento in F1 (per questo il ciclo sarebbe meglio farlo finire a i = 2 ).
    File Allegati File Allegati

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  8. #8
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    45
    Messaggi
    737
    Versione Office
    Excel 2010
    Likes ricevuti
    257
    Likes dati
    215

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da kellington90 Visualizza Messaggio
    Ti chiedo un ultima cosa: se dovessi impostare una variabile per quanto riguarda quell'auto filter, come dovrei fare?
    Mi spiego: anziché eliminare tutte le righe contenenti 0 nel Field2, volessi eliminare tutte le righe che contengono un valore MINORE di Range("F1").Value.
    permettimi prima un saluto a Cromagno...

    la macro diventa così; ho inserito il <= non il < nel caso modifica come meglio credi

    Codice: 
    Sub Elimina_Righe()
    Dim numRows As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        With Range("A1").CurrentRegion
        .AutoFilter Field:=2, Criteria1:="<=" & Range("F1").Value
        numRows = .SpecialCells(xlCellTypeVisible).Count / .Columns.Count
        If numRows > 1 Then
        .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
        End If
        .AutoFilter Field:=2
        .AutoFilter
        End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    saluti
    gg

  9. #9
    L'avatar di kellington90
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    Italia
    Messaggi
    31
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    2

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da ggratis Visualizza Messaggio
    permettimi prima un saluto a Cromagno...

    la macro diventa così; ho inserito il <= non il < nel caso modifica come meglio credi

    Codice: 
    Sub Elimina_Righe()
    Dim numRows As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        With Range("A1").CurrentRegion
        .AutoFilter Field:=2, Criteria1:="<=" & Range("F1").Value
        numRows = .SpecialCells(xlCellTypeVisible).Count / .Columns.Count
        If numRows > 1 Then
        .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
        End If
        .AutoFilter Field:=2
        .AutoFilter
        End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    saluti
    gg

    Ciao, h provato questa macro all'interno di una tabella e mi restituisce un errore vba "impossibile spostare celle in una tabella o in un intervallo filtrato" e mi evidenzia in giallo la parte " .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete" .. Trattandosi di formato:tabella bisogna scrivere un codice leggermente diverso? O non si puo' ?

  10. #10
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    45
    Messaggi
    737
    Versione Office
    Excel 2010
    Likes ricevuti
    257
    Likes dati
    215

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da kellington90 Visualizza Messaggio
    Ciao, ho provato questa macro all'interno di una tabella e mi restituisce un errore vba "impossibile spostare celle in una tabella o in un intervallo filtrato" e mi evidenzia in giallo la parte " .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete" .. Trattandosi di formato:tabella bisogna scrivere un codice leggermente diverso? O non si puo' ?
    un po' diverso lo è, prova così...

    Codice: 
    Sub Elimina_Righe1()
    Dim numRows As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        With ActiveSheet
            .ListObjects("Tabella1").Range.AutoFilter Field:=2, Criteria1:="<=" & Range("F1").Value
    On Error Resume Next
            With .Range("Tabella1")
                numRows = .SpecialCells(xlCellTypeVisible).Count / .Columns.Count
                If numRows >= 1 Then .EntireRow.Delete
            End With
            .ListObjects("Tabella1").Range.AutoFilter Field:=2
        End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    ovviamente in Formule>gestione nomi
    devi rinominare con "Tabella1" il nome della tua tabella o utilizzare nella macro quello corrispondente.

    saluti
    gg

  11. #11
    L'avatar di kellington90
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    Italia
    Messaggi
    31
    Versione Office
    2013
    Likes ricevuti
    0
    Likes dati
    2

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da ggratis Visualizza Messaggio
    un po' diverso lo è, prova così...

    Codice: 
    Sub Elimina_Righe1()
    Dim numRows As Long
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        With ActiveSheet
            .ListObjects("Tabella1").Range.AutoFilter Field:=2, Criteria1:="<=" & Range("F1").Value
    On Error Resume Next
            With .Range("Tabella1")
                numRows = .SpecialCells(xlCellTypeVisible).Count / .Columns.Count
                If numRows >= 1 Then .EntireRow.Delete
            End With
            .ListObjects("Tabella1").Range.AutoFilter Field:=2
        End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    ovviamente in Formule>gestione nomi
    devi rinominare con "Tabella1" il nome della tua tabella o utilizzare nella macro quello corrispondente.

    saluti
    gg
    EDIT: Prima ho scritto un messaggio sul forum che però non è stato preso perciò riecocmi. Grazie innanzitutto per avermi proposto un ulteriore soluzione, il problema è che non funziona. Non ci sono messaggi di errore e tutto fila liscio, ma quello che fa è filtrare la colonna con i valori uguale a 0 (perchè ho utilizzato criteria = 0 ) e non eliminare nulla.... rimane semplicemente filtrato..
    Ultima modifica fatta da:kellington90; 20/06/16 alle 18:44 Motivo: cliccato per sbaglio il tasto invia

  12. #12
    L'avatar di ggratis
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Lecce - Pisa
    Età
    45
    Messaggi
    737
    Versione Office
    Excel 2010
    Likes ricevuti
    257
    Likes dati
    215

    Re: Eliminare piu' righe contemporeanamente con macro

    Citazione Originariamente Scritto da kellington90 Visualizza Messaggio
    EDIT: Grazie innanzitutto per avermi proposto un ulteriore soluzione, il problema è che non funziona. Non ci sono messaggi di errore e tutto fila liscio, ma quello che fa è filtrare la colonna con i valori uguale a 0 (perchè ho utilizzato criteria = 0 ) e non eliminare nulla.... rimane semplicemente filtrato..
    Se alleghi il file su cui stai facendo le prove depurato dei dati sensibili e di quanto superfluo, si può dare un'occhiata...

    saluti
    gg

Discussioni Simili

  1. [Risolto] eliminare righe doppie
    Di Chiarpato nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 19/01/17, 15:59
  2. Eliminare righe sotto certe condizioni
    Di saturn87 nel forum Domande su Excel in generale
    Risposte: 14
    Ultimo Messaggio: 13/08/16, 14:19
  3. Inserire ed eliminare righe con userform
    Di G.Bove nel forum Domande su Excel VBA e MACRO
    Risposte: 10
    Ultimo Messaggio: 24/07/16, 13:09
  4. come eliminare righe vuote, tra righe di testo in una pagina excel
    Di francesco71 nel forum Domande su Excel in generale
    Risposte: 9
    Ultimo Messaggio: 08/05/16, 14:13
  5. Eliminare righe duplicate
    Di lala10 nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 29/04/16, 14:52

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •