› Excel e gli applicativi Microsoft Office › Macro per cancellazione righe
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
-
AutoreArticoli
-
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 colonne2) le celle con la stringa "DA CANCELLARE" sono posizionate a "macchia di leopardo" , nel senso che non è detto che si trovino nella stessa colonna3) 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à aiutarmiPinilSe non alleghi in file di esempio con i dati ed il risultato desiderato inserito a mano sarà difficile aiutarti.AlfredoCiao 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 Ariga Criga Driga Friga Griga Kriga Mvedasi 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 datiA beneficio tuo e degli utenti interessati alla soluzione del problema, spero di essere stato chiaroGraziePinil
Allegati:
You must be logged in to view attached files.Ciaocol permesso di Alfredo (un caro saluto), prova a lanciare con questa macroOption 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 SubFai sapere. Ciao,MarioGrazie 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 3E così via.In pratica devo far ripartire la macro tante volte finché non mi cancella tutte le righe contenenti stringa "DA CANCELLARE"Mah!!!CiaoNon 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 rigaAllega il file in cui fa quello ... scherzetto e vediamo di capire perchè.Ciao,MarioTi allego il file come richiestoLa tua SUB è già inserita nella macroGrazieAllegati:
You must be logged in to view attached files.CiaoLe stranezze di Excel ...Ho inserito il codice per selezionare l'ultima cella piena. Risposta $AC$1134Ho cambiato la macro ed ho inserito il codice per selezionare l'ultima cella piena.Risposta $AC$380La 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 SubPer 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.Ciao Mario, solo per confermarti la correttezza della tua ultima SUBFunziona perfettamente!!!!!L'ho testata su un foglio con notevole quantità di dati e non ha dato alcun problemaChe dirti: SEI UN GRANDECiao e alla prossima richiesta di aiuto (perché ho tanto da imparare)1000 graziePinilGrazie 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 -
AutoreArticoli
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
