Excel Forum Per condividere esperienze su Microsoft Excel

Cancella la riga in base al comando

  • Messaggi
  • OFFLINE
    gattodimarmo1980
    Post: 138
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 26/04/2019 21:11
    Buona sera nel foglio che allego ho creato 11 pulsanti. Nel foglio dovrei cancellare tutte la righe quando premo uno degli undici pulsanti, la colonna B è assunta come interlocutore del comando. Grazie e buon Week end Matteo
  • OFFLINE
    raffaele1953
    Post: 3.742
    Registrato il: 28/06/2011
    Città: AGORDO
    Età: 70
    Utente Master
    2013
    00 27/04/2019 02:06
    A scelta ricreare la prima per ogni tasto, oppure basta solo la seconda...
    Option Explicit
    Option Compare Text
    Sub Sigle_BA()
    Dim Ur As Long, X As Long
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    For X = 1 To Ur
        If Cells(X, 2) = "BA" Then
            Range(Cells(X, 1), Cells(X, 7)).ClearContents
            'oppure  Range(Cells(X, 1), Cells(X, 7)).Delete Shift:=xlUp
        End If
    Next X
    End Sub
    Sub Sigle_tutte()
    Dim Ur As Long, X As Long, N As Long, Msg As String
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Msg = InputBox("Digitare due caratteri, Ex BA", , "")
    If Msg = "" Then Exit Sub
    For X = 1 To Ur
        If Cells(X, 2) = Msg Then
            Range(Cells(X, 1), Cells(X, 7)).ClearContents
            'oppure  Range(Cells(X, 1), Cells(X, 7)).Delete Shift:=xlUp
            N = N + 1
        End If
    Next X
    If N = 0 Then MsgBox "Nessuna sigla con " & Msg
    End Sub
    [Modificato da raffaele1953 27/04/2019 02:16]
    Excel 2013
  • OFFLINE
    dodo47
    Post: 2.197
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 27/04/2019 10:07
    Ciao
    solo per ricordare che in caso di eliminazione delle righe è opportuno iniziare il ciclo dal basso altrimenti su due sigle contigue ne verrebbe eliminata una soltanto.

    saluti


    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    raffaele1953
    Post: 3.743
    Registrato il: 28/06/2011
    Città: AGORDO
    Età: 70
    Utente Master
    2013
    00 27/04/2019 12:34
    Hai ragione dodo47 (grazie mille), pensavo per i pulsanii da modificare...

    Se volesse usare... Delete Shift:=xlUp
    Dovrebbe essere For X = Ur To 1 step -1
    Excel 2013
  • OFFLINE
    gattodimarmo1980
    Post: 138
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 29/04/2019 21:00
    Ciao Raffaele rispondo solo ora perché ho avuto dei problemi sentimentali è non ho usato il pc per quattro giorni, macro perfetta,
    rispondo anche a Domenico ho provato ad usare il ciclo e anche dall'alto le sigle vengono eliminate tutte correttamente. Buona serata amici.
  • OFFLINE
    dodo47
    Post: 2.202
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 29/04/2019 21:41
    Tu pensala come vuoi, ma il ciclo di eliminazione delle righe è corretto solo se il loop viene fatto dal basso verso l'alto.

    Saluti
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    raffaele1953
    Post: 3.749
    Registrato il: 28/06/2011
    Città: AGORDO
    Età: 70
    Utente Master
    2013
    00 30/04/2019 13:14
    @gattodimarmo1980
    Se metti due sigle uguali, uno dopo l'altro non funzionerebbe
    Excel 2013
  • OFFLINE
    gattodimarmo1980
    Post: 139
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 30/04/2019 21:35
    Modulo2 cancella x mese,Modulo 3 cancella x anno,Modulo4 x giorni
    Ciao Raffaele ti metto il file con la macro da provare ,ripeto a me funziona vengono eliminate tutte le righe correttamente ho fatto più di 50 prove sia dall'alto che dal basso e viceversa può dipendere dalla versione di Excel magari. Lele, si potrebbe aggiungere tre moduli uno che cancella tutte le righe inserendo per esempio un Msg = InputBox("Digitare mese, Ex Febbraio", , ""),per il modulo 3 un
    Msg = InputBox("Digitare anno, Ex 2014", , "")per il modulo 4 un
    Msg = InputBox("Digitare giorni, Ex 28 ", , "").Grazie buona serata Matteo
  • OFFLINE
    raffaele1953
    Post: 3.750
    Registrato il: 28/06/2011
    Città: AGORDO
    Età: 70
    Utente Master
    2013
    00 30/04/2019 21:53
    Funziona perche stai solo annullando i valori... e non usi la riga verde che era disattivata
    For X = 1 To Ur
        If Cells(X, 2) = Msg Then
            Range(Cells(X, 1), Cells(X, 7)).ClearContents
            N = N + 1
        End If
    Next X

    Io e dodo47, abbiamo scritto se invece desideri eliminare la riga. Devi usare la riga verde
    For X = Ur To 1 Step -1
        If Cells(X, 2) = Msg Then
            Range(Cells(X, 1), Cells(X, 7)).Delete Shift:=xlUp 'nota la differenza
            N = N + 1
        End If
    Next X

    Se desideri fai la prova, metti in colonna B tutte le sigle=RO e vedrai da solo

    Sub Giorno()
    Dim Ur As Long, X As Long, Msg As Long
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Msg = InputBox("Digitare un numero da 1 a 31", , 0)
    If Msg = 0 Or Msg > 31 Then Exit Sub
    For X = Ur To 1 Step -1
        If Day(Cells(X, 1)) = Msg Then
            Range(Cells(X, 1), Cells(X, 7)).ClearContents' se abiliti quella sotto devi disabilitare questa
            'Range(Cells(X, 1), Cells(X, 7)).Delete Shift:=xlUp
        End If
    Next X
    MsgBox "Fatto"
    End Sub
    Sub Mese()
    Dim Ur As Long, X As Long, Msg As Long
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Msg = InputBox("Digitare un numero da 1 a 12", , 0)
    If Msg = 0 Or Msg > 12 Then Exit Sub
    For X = Ur To 1 Step -1
        If Month(Cells(X, 1)) = Msg Then
            Range(Cells(X, 1), Cells(X, 7)).ClearContents
            'Range(Cells(X, 1), Cells(X, 7)).Delete Shift:=xlUp
        End If
    Next X
    MsgBox "Fatto"
    End Sub
    Sub anno()
    Dim Ur As Long, X As Long, Msg As Long
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Msg = InputBox("Digitare anno con 4 numer1 da 1900 a 2100", , 0)
    If Msg < 1900 Or Msg > 2100 Then Exit Sub
    For X = Ur To 1 Step -1
        If Year(Cells(X, 1)) = Msg Then
            Range(Cells(X, 1), Cells(X, 7)).ClearContents
            'Range(Cells(X, 1), Cells(X, 7)).Delete Shift:=xlUp
        End If
    Next X
    MsgBox "Fatto"
    End Sub
    
    [Modificato da raffaele1953 30/04/2019 23:51]
    Excel 2013
  • OFFLINE
    gattodimarmo1980
    Post: 140
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 01/05/2019 11:06
    Modulo 5 Tieni numero
    Buon Giorno Raffaele ho notato la differenza solo ora, ho fatto la prova e infatti dall'alto ne viene eliminata soltanto una. Mi servirebbe un altro modulo, nelle colonne C,D,E,F,G ci sono i numeri,
    si potrebbe cancellare cancella tutte le righe inserendo per esempio un Msg = InputBox("TIENI UN NUMERO DA 1 a 90", , "")che non contengono il numero selezionato.Grazie buon primo maggio Matteo
  • OFFLINE
    gattodimarmo1980
    Post: 141
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 04/05/2019 15:35
    Modulo 5 Tieni numero
    Per questo modulo mi consigliate di aprire una nuova discussione perché si tratta di far partire una ciclo facendo una ricerca verticale cancellando poi le righe che non servono o possiamo continuarla tranquillamente qui? Buon Week end Matteo
  • OFFLINE
    gattodimarmo1980
    Post: 160
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 23/08/2019 10:21
    Tieni la riga in base a ....
    Buon giorno allego file con userform associata.
    Mi servirebbe un macro che mi tiene le righe in base al numero e mi cancella le altre.Esempio numero 15.Una volta tenuto il numero 15, il codice dovrebbe cancellarmi le righe 3 4 5 6 e la 13°.IL range è (A1 C14)in questo esempio escludere quindi i valori del numero stesso in colonna (D).Una volta finito il ciclo le righe vuote poi devono essere cancellate.Grazie anticipatamente.
    P.S. Non ho aperto una nuova discussione perché e simile a questa
  • OFFLINE
    dodo47
    Post: 2.345
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 23/08/2019 12:29
    non c'è nessuna userform nel tuo file.

    e poi perchè non cancellare anche la riga 2 e 14 ?
    e perchè cancellare la riga 6 ?

    saluti



    [Modificato da dodo47 23/08/2019 12:30]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    gattodimarmo1980
    Post: 161
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 23/08/2019 14:29
    Ciao Domenico scusa ma non ho associato la Userform ho associato solo il pulsante e non mi sono spiegato bene. L'userform deve dire "digita un numero compreso fra 1 e 90" In questo caso digito il numero 15.Io tenendo il numero 15 devo cancellare le righe 3 4 5 6 e la 13°.Nella riga (6) il 15 è presente in colonna D perciò la riga bisogna cancellarla.Riga 2 ,il 15 è in C2 perciò la riga non va cancellata.Riga (14) il 15 è in (A14) perciò la riga va tenuta e non cancellata.Per far si che la macro vada a buon fine bisogna da subito escludere tutti i valori della colonna D.Grazie ciao Dodo47
  • OFFLINE
    gattodimarmo1980
    Post: 162
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 24/08/2019 11:24
    Riscontro non giusto
    Buon giorno a tutti ho provato a modificare questa macro ma non ho il risultato che volevo. Se riuscite per favore a vedere l'errore. Secondo me l'errore è che i numeri devono essere nel range A C in ordine crescente. Se i numeri sono in ordine decrescente la macro mi cancella la riga. Allego foglio



    Sub Tieninumerocancellariga()

    Dim num As Integer
    Dim rng As Range
    Dim riga As Long

    On Error GoTo fine 'esci se non rispondo
    num = InputBox("Digitare un numero da 1 a 90")
    If Not num >= 1 Or Not num <= 90 Then Exit Sub 'esci se immesso numero non previsto
    Application.ScreenUpdating = False
    With Worksheets("Foglio1")
    Set rng = .Range("A1:C" & .Cells(Rows.Count, 1).End(xlUp).Row) 'rilevo l'area da gestire
    For riga = rng.Rows.Count To 1 Step -1 'ciclo tutte le righe
    'verifico se c'è il numero nella riga
    If Not Application.WorksheetFunction.CountIf(.Range("C" & riga & ":C" & riga), num) > 0 Then
    rng.Rows(riga).EntireRow.Delete 'altrimenti elimino l'intera riga
    End If
    Next riga
    End With
    Application.ScreenUpdating = True
    fine:
    End Sub
    Buon giorno a tutti ho provato a modificare questa macro ma non ho il risultato che volevo. Se riuscite per favore a vedere l'errore.
    [Modificato da gattodimarmo1980 24/08/2019 11:29]
  • OFFLINE
    dodo47
    Post: 2.347
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 24/08/2019 12:55
    prova:

    .......
    If Application.WorksheetFunction.CountIf(.Range("A" & riga & ":C" & riga), num) = 0 Then
    .......

    saluti




    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    gattodimarmo1980
    Post: 163
    Registrato il: 03/10/2015
    Città: ALBAREDO PER SAN MARCO
    Età: 44
    Utente Junior
    2003
    00 24/08/2019 14:32
    Ottimo Domenico ti ringranzio molto.Ciao Matteo
  • 15MediaObject5,00117 1