Condividi tramite

macro ELIMINA RIGHE

Anonimo
2012-05-03T14:50:44+00:00

Salve a tutti.

ho una tabella excel "estratte" che contiene max 3000 record.  Come posso eliminare automaticamente tramite macro

le righe che in colonna C hanno il campo data minore di 01/01/2012?

ho provato cosi ma non funziona forse perche il numero riga cambia dopo che e' stata eliinata la precedente? come risolvo?

Sheets("estratte").Select

    Application.ScreenUpdating = False

   For X = 1 To 3000

    Sheets("ESTRATTE").Activate

         If Cells(X, 2).Value < "01/01/2012" Then

       Rows(X).Select

       Selection.Delete Shift:=xlUp

       Range("A1").Select

   End If

Next

 Sheets("ESTRATTE").Select

end sub

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2012-05-03T15:12:48+00:00

    Salve a tutti.

    ho una tabella excel "estratte" che contiene max 3000 record.  Come posso eliminare automaticamente tramite macro

    le righe che in colonna C hanno il campo data minore di 01/01/2012?

    <cut>

    Devi partire dall'ultima riga.

    Esempio:

    Public Sub m()

        Dim sh As Worksheet

        Dim lRiga As Long

        Dim lng As Long

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        With sh

            lRiga = .Range("C" & .Rows.Count).End(xlUp).Row

            For lng = lRiga To 1 Step -1

                If .Range("C" & lng).Value < CDate("05/01/2012") Then

                    .Rows(lng).Delete Shift:=xlUp

                End If

            Next

        End With

        Set sh = Nothing

    End Sub

    E' importante *anche* specificare che la tua stringa di confronto è una data.

    Inoltre, guardando il tuo codice, Cells(X,2) si riferisce alla colonna B e non C.

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-05-04T06:38:01+00:00

    Grazie Mauro!

    Quindi era come immaginavo (errori a parte dovuti ad alcune prove :) )

    se parto da sopra l'indice riga cambia giusto!

    Avevo intuito che dovevo processare il tutto dall'ultima riga ma il come ... era troppo per me!

     

    Bene!

    Grazie per il cortese riscontro. Se hai bisogno sai che siamo (quasi) sempre qui. Buona giornata e buon lavoro.

    0 commenti Nessun commento
  2. Anonimo
    2012-05-04T06:36:23+00:00

    e sullo cdate ("01/01/2012") dove trovo spiegazioni?

     

    Fai questa semplice prova:

    Public Sub m()

        Range("A1").Value = "05/01/2012"

        Range("A2").Value = CDate("05/01/2012")

        Range("A3").Value = Format("05/01/2012", "mm/dd/yyyy")

    End Sub

    Come vedi, i risultati nelle tre celle sono ben diversi. Il VisualBasic trasforma in modo implicito la stringa di testo in data e nel fare questo, *presume* tu stia utilizzando il sistema americano di scrivere le date, mm/gg/aaaa e non quello italiano gg/mm/aaaa. Ecco quindi che quando passi il valore ad Excel ti ritrovi la data invertita per il giorno ed il mese.

    Le ultime due righe di codice sono quelle corrette. Io preferisco la seconda dove *esplicito* che la stringa deve essere trasformata in data. In questo modo posso anche intercettare date insesistenti(errori di scrittura) tipo:

    Public Sub m()

        Range("A1").Value = "30/02/2012"

        Range("A2").Value = CDate("30/02/2012")

    End Sub

    Dove la prima stringa viene scritta in cella A1, in quanto la conversione implicita la tratta come stringa di testo, mentre la seconda restituisce un errore in quanto non esiste il 30 febbraio.

    Vedi anche qui un esempio di come impedire l'inserimento di date *fantasiose*:

    http://www.maurogsc.eu/comefareperexcel/userformdata.aspx

    Grazie per l'attenzione.

    0 commenti Nessun commento
  3. Anonimo
    2012-05-04T06:20:17+00:00

    e sullo cdate ("01/01/2012") dove trovo spiegazioni?

    0 commenti Nessun commento
  4. Anonimo
    2012-05-04T06:18:50+00:00

    Grazie Mauro!

    Quindi era come immaginavo (errori a parte dovuti ad alcune prove :) )

    se parto da sopra l'indice riga cambia giusto!

    Avevo intuito che dovevo processare il tutto dall'ultima riga ma il come ... era troppo per me!

    0 commenti Nessun commento