You are here:--[RISOLTO] Togliere righe se soddisfa una condizione
[RISOLTO] Togliere righe se soddisfa una condizione 2018-12-07T09:38:13+00:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Togliere righe se soddisfa una condizione

  • Autore
    Articoli
  • teto21162
    Partecipante
      Post totali: 46
      #7239 |

      Salve Ragazzi,

      avrei la necessità di eliminare tutte le righe che soddisfano una condizione numerica tipo maggiore di 400 in un range che va da riga 11 a riga 5000 e vorrei farlo con un codice vba.

      Come esempio si può considerare che la condizione sia determinata da una formula presente in una cella della stessa riga tipo g100 quindi se il risultato di formula di g100 è 401 il codice elimina la riga 100 con tutto il suo contenuto

      Questo per togliere dati obsoleti e per tenere compattata la zona dati

      Grazie a tutti

      Teto

      • Questo argomento è stato modificato 3 settimane, 5 giorni fa da  teto21162.
      • Questo argomento è stato modificato 3 giorni, 19 ore fa da sid sid.
    • BySalvBySalv
      Amministratore del forum
        Post totali: 336

        Ciao questa potrebbe essere una soluzione

        Sub DelRiga()
        Dim r, c, x
        
        r = Cells(Rows.Count, 7).End(xlUp).Row
        For x = r To 2 Step -1
            If Cells(x, 7) > 400 Then
                Rows(x & ":" & x).Select
                Selection.Delete Shift:=xlUp
            End If
        Next x
        End Sub

        ho tenuto conto della colonna “G”

        Ciao By Sal :bye:

      • teto21162
        Partecipante
          Post totali: 46

          Ciao By sal,

          Grazie intanto del suggerimento, ma mi sono accorto che ho bisogno che venga soddisfatta un’altra condizione.

          Prima della condizione in colonna G bisogna che ci sia un codice che controlla che il dato in colonna H sia uguale a zero

          Quindi riprendendo l’esempio originario se in cella H100 c’è un valore = a zero e in cella G100 il valore è 401 mi elimina la riga diversamente non fa nulla.

          Grazie e scusa della svista

          Teto

        • teto21162
          Partecipante
            Post totali: 46

            Ciao Bysal,

            il codice purtroppo elimina indiscriminatamente tutte le righe che soddisfano le condizioni a me serve che agisca solo dalla riga 11 alla riga 5000

            Le condizioni da soddisfare sono:

            1) dato in colonna H non vuoto

            2) dato in colonna H = a zero

            3) dato in colonna E maggiore di 400

            Spero si possa trovare una soluzione

            Teto :bye:

            • Questa risposta è stata modificata 3 settimane fa da  teto21162.
          • sidsid
            Moderatore
              Post totali: 502

              Ciao

              prova così

              Sub DelRiga()
              Dim nRiga As Long
              
              Application.ScreenUpdating = False
              With Sheets("Foglio1") ' NOME TUO FOGLIO
                  For nRiga = 5000 To 11 Step -1
                      If .Range("E" & nRiga) > 400 And _
                          .Range("H" & nRiga) = 0 And _
                          .Range("H" & nRiga) <> vbNullString Then
                          .Rows(nRiga).EntireRow.Delete Shift:=xlUp
                      End If
                  Next nRiga
              End With
              Application.ScreenUpdating = True
              
              End Sub
            • teto21162
              Partecipante
                Post totali: 46

                Grazie sid,

                codice perfettamente funzionante.

                Nel frattempo mi è venuta un’idea, ma se una volta identificate le righe da togliere ci fosse la necessità,  prima di eliminarle,  di copiare il loro contenuto da un’altra parte tipo chiavetta esterna  e fattibile?

                teto :good:

              • sidsid
                Moderatore
                  Post totali: 502

                  Se intendi Copiare solo le righe che elimini, ti conviene aggiungere un foglio sul tuo file, e copiarle lì; in questo modo ti crei un database di tutte le righe che elimini ogni volta che usi la macro
                  La vedo più semplice. Al limite poi ti copi il file dove vuoi.

                  EDIT
                  in questo modo in caso di una ricerca non devi usare la chiavetta; hai tutto sul file :-)

                  • Questa risposta è stata modificata 2 settimane, 4 giorni fa da sid sid.
                • teto21162
                  Partecipante
                    Post totali: 46

                    intendi copiarle a mano prima di far funzionare il codice?

                    Sarebbe utile se il meccanismo fosse questo.

                    1) avere un codice che controlla se ci sono righe che soddisfano i parametri del codice che mi hai passato cioe:

                    If .Range("E" & nRiga) > 400 And _ .Range("H" & nRiga) = 0 And _ .Range("H" & nRiga) <> vbNullString

                    Se li soddisfa mi mostra un messaggio che mi permette di scegliere se eliminare in quel momento oppure un’altra volta

                    2) nel momento che decido di eliminare mi copia i dati da eliminare prima in un foglio esterno al file meglio disco esterno poi li elimina

                    Teto

                    • Questa risposta è stata modificata 2 settimane, 3 giorni fa da sid sid.
                  • sidsid
                    Moderatore
                      Post totali: 502

                      intendi copiarle a mano prima di far funzionare il codice?

                      Assolutamente no; tutto tramite codice

                      Curiosità: ma è necessario elimnare tutta la riga? Immagino tu abbia un database, quindi perchè non elimini solo la parte di riga della tabella. In questo modo eviti di eliminare eventuali celle con formule al di fuori della tabella, e di ritrovarti con celle che restituiscono #RIF

                    • teto21162
                      Partecipante
                        Post totali: 46

                        Ciao Sid,

                        per quanto riguarda la copiatura dei dati prima di eliminarli credo di riuscire a risolvere utilizzando le proprietà dei filtri ( infatti ho aperto una discussione apposita )

                        Dopo il filtraggio, come mi hai consigliato tu, i dati che eliminerò insieme alle righe vengono copiati in un foglio già esistente ” uso questo codice per farlo e funziona

                        Set ZONA3 = Range(“F10:G5000,n10:n5000,r10:r5000”)

                        ZONA3.Select

                        Selection.Copy

                        Sheets(“foglio di stampa”).Select ‘ ipotizzo di copiare nel foglio2

                        ‘questo che segue serve per trovare la prima riga vuota della colonna 1 (Riga,1)

                        Dim riga As Integer

                        riga = 3     ‘ definisce la riga da cui inizia a cercare

                        While Sheets(“foglio di stampa”).Cells(riga, 6).Value <> “”

                        riga = riga + 1

                        Wend ‘ quando trova la prima riga vuota la seleziona e incolla la selezione

                        Sheets(“foglio di stampa”).Cells(riga, 1).Select

                        Selection.PasteSpecial Paste:=xlValues

                        Range(“c1”).Select

                        Selection.Copy

                        Range(“b1”).Select

                        Selection.PasteSpecial Paste:=xlValues

                         

                        e poi viene creato un file pdf che posiziono in una chiavetta.

                        Preferisco eliminare le righe per un fattore estetico di pulizia, ho già fatto diverse prove e non mi crea nessun errore.

                        Anche se nelle righe interessate ci sono alcune formule il fato di eliminarle non comporta errori sulle altre.

                        Se risolvo completamente la discussione sul filtraggio ritengo il problema risolto a meno che tu notassi qualcosa che non va

                        Teto :good:

                      • teto21162
                        Partecipante
                          Post totali: 46

                          Grazie Sid,

                          considero il problema RISOLTO

                          Teto  :good:

                        La discussione ‘[RISOLTO] Togliere righe se soddisfa una condizione’ è chiusa a nuove risposte.

                        Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

                        Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

                        Chiudi