eliminare righe vuote



  • eliminare righe vuote
    di rocco (utente non iscritto) data: 23/05/2014 12:51:13

    salve a tutti sto usando questa macro trovata sul forum

    Sub Elimina()
    Dim i
    Dim Stringa
    Stringa = "*fontane*"
    For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    If Cells(i, "A") Like Stringa Then
    Cells(i, "A").Select
    Selection.EntireRow.Delete
    End If
    Next i
    End Sub


    ma non so cosa mettere al posto di "fontana" nel caso in cui io volessi cancellare la riga in cui la prima cella non ci fosse nessun valore, totalmente vuota

    grazie a chi mi potra aiutare



  • di Lucas87 data: 23/05/2014 12:58:32

    Ciao
    Devi mettere ""(doppi apici)



  • di rocco (utente non iscritto) data: 23/05/2014 13:30:24

    mi rimane comunque una riga che come prima cella non ha un valore
    cosi:

    -1

    -1

    -1

    -1

    1

    1

    -1

    1

    -1

    -1

    1

    -1,5

    -1

    -1

    -1

    1



  • di Lucas87 data: 23/05/2014 13:54:59

    Fammi indovinare...la riga che rimane è l'ultima



  • di rocco (utente non iscritto) data: 23/05/2014 14:03:18

    no,è sempre!
    -1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    1
    riga vuota
    1
    riga vuota
    -1
    riga vuota
    1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    1
    riga vuota
    -1,5
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    1
    .............



  • di Lucas87 data: 23/05/2014 14:06:35


    A me funziona correttamente...
    L'unico problema è che se le ultime righe hanno la cella vuota allora non le elimina.
    Allega il file o creane uno simile in modo da capire cosa succede...



  • di rocco (utente non iscritto) data: 23/05/2014 14:12:38

    come si fa ad allegare un file?



  • di Lucas87 data: 23/05/2014 14:13:54

    In alto e in basso a dx c'è il pulsante "Allega file"



  • di rocco (utente non iscritto) data: 23/05/2014 14:14:37

    fatto



  • di Lucas87 data: 23/05/2014 14:25:07

    Non ti cancella quella riga perchè la prima cella non è vuota, ma contiene uno spazio.
    Selezione la colonna A e con il comando Sostituisci, imposta Sostituisci (1 spazio) con ""
    Usa il codice sotto
     
    Sub hh()
    Application.ScreenUpdating = False
    For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) = "" Then
            Rows(i).Delete
        End If
    Next
    Application.ScreenUpdating = True
    End Sub



  • di nichicanta (utente non iscritto) data: 23/05/2014 14:38:10

    Ciao Lucas87, ho provato il tuo codice sul foglio dell'amico rocco ma non cancella affatto le righe vuote ( cosa non va).
    Ho adatatto ( preso dall'emtusiasmo del quesito posto) il codice sottoriportato e funziona ( è alquanto veloce).
    E' una bella sfida per altri esperti di questo forum per creare altrettanto codice più veloce per l'eliminazione delle righe vuote, magari commentando il codice creato e perchè risulta più veloce.
    Vi saluto con sincerità e grandissimo affetto.
     
    Public Sub cancella_righe_vuote()
        Dim sh As Worksheet
        Dim t As Double
        Set sh = ThisWorkbook.Worksheets("Foglio1")
        Application.ScreenUpdating = False
        With sh
            .Range("A1").AutoFilter , Field:=1, Criteria1:="" 
            .Range("A1").CurrentRegion.SpecialCells( _
                xlCellTypeVisible).Rows.EntireRow.Delete
        End With
       Application.ScreenUpdating = True
       MsgBox Timer - t
       Set sh = Nothing
    End Sub
    



  • di rocco (utente non iscritto) data: 23/05/2014 14:47:42

    ora si funziona!
    la cella sembrava vuota invece c'era 1 o piu spazzi e quelli non si vedono
    quindi basta selezionare la colonna
    dal menu modifica sciegliere sostituisci
    nel campo trova inserire 1 spazio
    nel campo sostituisci con lasciarlo vuoto
    e la modifica è fatta
    poi si puo eseguire la macro

    grazie 5000



  • di Mister_x (utente non iscritto) data: 23/05/2014 15:01:31

    ciao nicacante

    forse non ai provato bene il tuo codice, quarda che in questo modo si elimina sempre la prima riga, anche se contene valori,
    seconda cosa dichiari la variabile t e dopo non vai a vedere quanto vale in partenza questa t

    Dim t As Double
    t = Timer

    ciao





  • di Mister_x (utente non iscritto) data: 23/05/2014 15:08:54

    riciao

    mi sono scordato di dire a rocco che alla sub() di Lucas87, che saluto, basta aggiungere la funzione Trim()
    If Trim(Cells(i, 1)) = "" Then

    ciao

     
    Sub hh()
    Application.ScreenUpdating = False
    For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Trim(Cells(i, 1)) = "" Then
            Rows(i).Delete
        End If
    Next
    Application.ScreenUpdating = True
    End Sub






  • di nichicanta (utente non iscritto) data: 23/05/2014 15:12:50

    Hai ragione Mister_x, ho provato a cambiare il range da A1 a A2 ma cancella sempre la prima riga anche valorizzata, come risolvere questo con il codice da me postato.
    Inoltre :t = Timer ( hai ragione anche qui) si è trattato di una dimenticanza ( la valorizzazione della variabile t)
    Mi spieghi (per favore) se si può risolvere questo con il codice che ho postato postato oppure occorre cambiare metodo?
    Grazie, vi stimo.



  • di Grograman data: 23/05/2014 16:31:56

    Cit: "Mi spieghi (per favore) se si può risolvere questo con il codice che ho postato postato oppure occorre cambiare metodo? "

    Suggerimento:

    Con un offset

    Vediamo come evolve.



  • di nichicanta (utente non iscritto) data: 23/05/2014 19:08:08

    Ciao Grograman, ho fatto cosi ma non cambia nulla, altro indizio e spiegazione, per favore, fammi capire bene come devo impostarlo con offset.
    Ti saluto.

     
    With sh
            .Range("A1").Offset(1).AutoFilter , Field:=1, Criteria1:=""
            .Range("A1").Offset(1).CurrentRegion.SpecialCells( _
                xlCellTypeVisible).Rows.EntireRow.Delete
        End With



  • di Grograman (utente non iscritto) data: 23/05/2014 20:21:20

    Prima filtri, poi ti sposti ed elimini ;)

    Ah, onde evitare di togliere anche la prima riga oltre il range filtrato, l'ideale sarebbe spostarsi e ridimensionare



  • di scossa data: 23/05/2014 20:47:48

    Il codice sotto elimina le apparentemente che contengo testo (come nel tuo file), dalla colonna A.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Sub EliminaVuote()
      Dim rng As Range
      Dim rngEmpty As Range
      Dim nLR As Long
      
      nLR = Cells(Rows.Count, 1).End(xlUp).Row
      Set rng = Range("A1:A" & nLR)
      On Error GoTo err_sub
      Set rngEmpty = rng.SpecialCells(xlCellTypeConstants, xlTextValues)
      rngEmpty.EntireRow.Delete
    err_sub:
      If Err.Number <> 0 Then MsgBox Err.Description, vbCritical
      Set rng = Nothing
      Set rngEmpty = Nothing
    End Sub
    



  • di nichicanta (utente non iscritto) data: 23/05/2014 21:05:40

    Ciao scossa ( sei grande) con il tuo codice ho il mio stesso errore e cioè che elimina la prima riga nel caso in cui ci sia questa situazione:
    no,è sempre!
    -1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    1
    riga vuota
    1
    nicola ? questo testo nella cella A1
    -1
    riga vuota
    1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    1
    riga vuota
    -1,5
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    -1
    riga vuota
    1
    .............
    per quanto riguarda te Grograman sono arrivato al punto di selezione della cella A2 dopo aver applicato il filtro, in questo modo.
    Ti chiedo ( ho registrato una macro con il filtro ed eliminato le righe vuote ecc, solo per poter capire come agisce il filtro con l'eliminazione delle righe vuote) a questo punto per poter dire di eliminare le righe vuote ( dopo averle selezionate ed essermi posizionato sulla cella A21), devo applicare un ciclo for oppure fare in altro modo. Grazie, vi saluto.



  • di nichicanta (utente non iscritto) data: 23/05/2014 21:08:45

    Scusa Grograman il codice di cui ti parlavo e che mi fa selezionare la cella A2 è questo:
    Public Sub cancella_righe_vuote1()
    Dim sh As Worksheet
    Dim t As Double
    Set sh = ThisWorkbook.Worksheets("Foglio1")
    Application.ScreenUpdating = False
    With sh
    .Range("A1").AutoFilter , Field:=1, Criteria1:="="

    .Range("A1").Offset(1).Select



  • di scossa data: 23/05/2014 21:46:30

    cit. nichicanta: Ciao scossa ( sei grande) con il tuo codice ho il mio stesso errore e cioè che elimina la prima riga nel caso in cui ci sia questa situazione:
    no,è sempre!


    Non ho capito da dove viene fuori quel "no, è sempre!".
    Premesso che avevo specificato che "elimina le celle che contengo testo", comunque se non vuoi cancellare la prima riga basta sostituire
    Set rng = Range("A1:A" & nLR)
    con
    Set rng = Range("A2:A" & nLR)

    Altirmenti basta ripulire (con trova e sostituisci) le celle apparentemente vuote e poi usare
    Set rngEmpty = rng.SpecialCells(xlCellTypeBlanks)


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Sub EliminaVuote()
      Dim rng As Range
      Dim rngEmpty As Range
      Dim nLR As Long
      
      nLR = Cells(Rows.Count, 1).End(xlUp).Row
      Set rng = Range("A2:A" & nLR)
      On Error GoTo err_sub
      Set rngEmpty = rng.SpecialCells(xlCellTypeConstants, xlTextValues)
      rngEmpty.EntireRow.Delete
    err_sub:
      If Err.Number <> 0 Then MsgBox Err.Description, vbCritical
      Set rng = Nothing
      Set rngEmpty = Nothing
    End Sub