Excel e gli applicativi Microsoft Office Macro per cancellazione righe

Login Registrati
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
  • Autore
    Articoli
  • #4121 Score: 0 | Risposta

    Pinil
    Partecipante
      Un saluto agli utenti e agli esperti del Forum.
       
      Chiedo il Vostro prezioso aiuto per la seguente problematica: non riesco a creare una macro che mi cancelli l’intera riga dove, in  qualsiasi cella della riga stessa, sia presente la stringa “DA CANCELLARE”.
       
      Preciso che:
       
      1) il foglio excel interessato alla “epurazione”, potrebbe avere dimensioni variabili che vanno da poche decine righe e poche colonne, a decine di migliaia di righe e svariate decine di colonne
       
      2) le celle con la stringa "DA CANCELLARE" sono posizionate a "macchia di leopardo" , nel senso che non è detto che si trovino nella stessa colonna
       
      3) le celle con la stringa "DA CANCELLARE" potrebbero trovarsi anche nella prima riga (in quanto è un foglio che non contiene capicolonna (intestazioni)
       
      Ringrazio anticipatamente chi vorrà aiutarmi
       
      Pinil
      #4125 Score: 0 | Risposta

      alfrimpa
      Partecipante
        33 pts
        Se non alleghi in file di esempio con i dati ed il risultato desiderato inserito a mano sarà difficile aiutarti.
         
        Alfredo
        #4153 Score: 0 | Risposta

        Pinil
        Partecipante
          Ciao Alfredo, scusa il ritardo con cui ti rispondo e ti allego il file di esempio (ovviamente i dati sono di fantasia)
           
          Come evidenziato nella scheda "Origine" e come specificato nella domanda iniziale, ci sono delle celle con la stringa "DA CANCELLARE"; bene, la macro che mi interessa, dovrebbe cancellare l'intera riga ove è presente (in qualsiasi punto)  la cella con quella stringa.
           
          Nella fattispecie la macro dovrebbe cancellare le righe denominate (per praticità e per far meglio comprendere):
           
          riga A
          riga C
          riga D
          riga F
          riga G
          riga K
          riga M
           
          vedasi risultato nella scheda "Risultato desiderato".
           
          Come detto nella domanda iniziale la stringa potrebbe trovarsi anche nella prima colonna  (colonna "A" di Excel) e/o nella prima riga (riga 1 di Excel).
           
          Ribadisco che il foglio può contenere - di volta in volta - un numero imprecisato di righe e colonne contenenti dati
           
          A beneficio tuo e degli utenti interessati alla soluzione del problema,  spero di essere stato chiaro
           
          Grazie
           
          Pinil
           
           
          Allegati:
          You must be logged in to view attached files.
          #4155 Score: 0 | Risposta

          Marius44
          Moderatore
            58 pts
             Ciao
            col permesso di Alfredo (un caro saluto), prova a lanciare con questa macro
            Option Explicit
            
            Sub UltimaCella()
            Dim c As Range, tabella As Range, cella As String
            cella = ActiveSheet.UsedRange.SpecialCells(xlLastCell, xlNumbers).Address
            Set tabella = Sheets("Origine").Range("B1:" & cella)
            For Each c In tabella
                If c.Value = "DA CANCELLARE" Then
                    c.EntireRow.Delete
                End If
            Next c
            End Sub
            Fai sapere. Ciao,
            Mario
            #4158 Score: 0 | Risposta

            Pinil
            Partecipante
              Grazie Mario per la risposta.
               
              Ho testato la tua SUB sul file di esempio che ho precedentemente postato ma nel quale ho volutamente aumentato  righe e colonne contenenti dati. Ho altresì aumentato in ordine sparso le celle con stringa "DA CANCELLARE" (al fine di rendere l'esempio molto vicino alla realtà operativa)
               
              Il risultato della tua SUB è stato parziale.
               
              Mi spiego.
               
              La macro mi cancella esattamente la metà delle righe di quelle che avrebbe dovuto cancellare:  nel foglio composto da X righe e Y colonne, ho inserito la stringa "DA CANCELLARE" nelle celle di  26 righe sparse; la macro me ne ha cancellato 13 (non cancellando le altre 13 righe).
              Quindi l'ho fatta ripartire e, delle 13 rimaste, me ne cancella 6. 
              Quindi l'ho fatta ripartire e, delle 6 rimaste, me ne cancella 3
              E così via.
              In pratica  devo far ripartire la macro tante volte  finché non mi cancella tutte le righe contenenti stringa "DA CANCELLARE"
               
              Mah!!!
               
              #4159 Score: 0 | Risposta

              Marius44
              Moderatore
                58 pts
                Ciao
                Non credo sia possibile quello che dici. Probabilmente le nuove righe/colonne che hai inserito non hanno la medesima struttura dell'esempio.
                La macro fa questo:
                - assume l'indirizzo dell'ultima cella piena
                - imposta come tabella dalla cella B1 fino all'ultima cella individuata
                - scorre ogni cella della tabella e quando trova corrispondenza elimina l'intera riga
                 
                Allega il file in cui fa quello ... scherzetto e vediamo di capire perchè.
                Ciao,
                Mario
                #4160 Score: 0 | Risposta

                Pinil
                Partecipante
                  Ti allego il file come richiesto
                  La tua SUB è già inserita nella macro
                   
                  Grazie
                  Allegati:
                  You must be logged in to view attached files.
                  #4162 Score: 0 | Risposta

                  Marius44
                  Moderatore
                    58 pts
                    Ciao
                    Le stranezze di Excel ...
                     
                    Ho inserito il codice per selezionare l'ultima cella piena. Risposta $AC$1134
                     
                    Ho cambiato la macro ed ho inserito il codice per selezionare l'ultima cella piena.
                    Risposta $AC$380
                     
                    La prima risposta è sbagliata; la seconda è esatta.
                    La nuova macro (che fa il lavoro corretto) è la seguente:
                    Sub LastCell()
                    Dim UltRig As Long, UltCol As Long, i As Long, j As Long
                    UltRig = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
                    UltCol = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
                    Cells(UltRig, UltCol).Select
                    Stop
                    Application.ScreenUpdating = False
                    For i = UltRig To 1 Step -1
                        For j = UltCol To 1 Step -1
                            If Cells(i, j) = Trim("DA CANCELLARE") Then
                                Cells(i, j).EntireRow.Delete
                                Exit For
                            End If
                        Next j
                    Next i
                    Application.ScreenUpdating = True
                    End Sub
                    

                    Per farti vedere quanto sopra ho inserito il codice di selezione e subito dopo uno Stop.

                    Se la macro funziona (e le mie prove danno esito positivo), elimina quelle due righe.

                    Fai sapere. Ciao,

                    Mario

                    Allegati:
                    You must be logged in to view attached files.
                    #4172 Score: 0 | Risposta

                    Pinil
                    Partecipante
                      Ciao Mario, solo per confermarti la correttezza della tua ultima SUB
                      Funziona perfettamente!!!!!
                       
                      L'ho testata su un foglio con notevole quantità di  dati e non ha dato alcun problema
                       
                      Che dirti:  SEI UN GRANDE
                       
                      Ciao e alla prossima richiesta di aiuto (perché ho tanto da imparare)
                       
                      1000 grazie
                       
                      Pinil
                      #4173 Score: 0 | Risposta

                      Pinil
                      Partecipante
                         
                        #4184 Score: 0 | Risposta

                        Marius44
                        Moderatore
                          58 pts
                          Grazie per il cortese riscontro.
                          Ti sollecito, però, ad imparare VBA anche studiando attraverso i codici che di volta in volta ti vengono forniti.
                          Come avrai notato, la seconda Sub incomincia dal basso per finire alla riga 1; l'altra usava un procedimento inverso.
                           
                          Ciao,
                          Mario
                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: Macro per cancellazione righe
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: