Condividi:        

[EXCEL] Eliminare righe che contengono un valore

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[EXCEL] Eliminare righe che contengono un valore

Postdi alexthevoice » 05/10/09 10:55

Salve ragazzi, io devo eliminare delle righe sun un foglio di lavoro con 30.000 righe, voglio eliminare tutte le righe che contengono la parola "pippo", tutte quelle che contengono la parola "topolino" etc etc...

Vi avviso che non sono esperto in fatto di macro, non ne so proprio nulla...

Rimango speranzioso in attesa...

Cordiali saluti

Alessandro
alexthevoice
Newbie
 
Post: 2
Iscritto il: 05/10/09 10:50

Sponsor
 

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Anthony47 » 05/10/09 13:52

Ciao alex e benvenuto nel forum.
Nella tua situazione il mio suggerimento e' di usare il filtro automatico: selezioni la colonna di tuo interesse, filtri con la condizione Contiene "pippo", selezioni tutte le righe filtrate e le elimini (Menu /Modifica /Elimina /Righe); ripeti con Contiene "topolino", e con le altre parole che ti interessano.

Se e' una operazione che devi ripetere spesso, puoi registrare una macro (Menu /Strumenti /Macro /Registra nuova macro) mentre esegui dette operazioni; poi disegni un Pulsante (lo trovi nella barra di strumenti Moduli) e gli associ la macro; ti bastera' quindi premere il pulsante per ripetere l' operazione.

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Flash30005 » 05/10/09 14:02

Ciao Alessandro
Non hai specificato in quale colonna si trovano i nomi che devi eliminare comunque questa macro toglie le righe ovunque essi si trovino
Codice: Seleziona tutto
Sub DelNumRipet()
Dim Cancella(5) As String
Cancella(1) = "PIPPO"
Cancella(2) = "TOPOLINO"
Cancella(3) = "PAPERINA"
Cancella(4) = "PLUTO"
Cancella(5) = "PAPERONE"
For C = 1 To 5
UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For CR = UR To 2 Step -1
UC = Worksheets("Foglio1").Cells(CR, Columns.Count).End(xlToLeft).Column

Rows(CR & ":" & CR).Select
    For CC = 1 To UC
        If Cancella(C) = UCase(Cells(CR, CC).Value) Then Rows(CR & ":" & CR).Delete Shift:=xlUp
    Next CC
Next CR
Next C
End Sub

Non sapendo quanti nomi devi ricercare ho dimensionato il vettore "Cancella(5)" per 5 stringhe (valore tra le parentisi) se dovessero occorrere più metterai 10, 15 etc al posto di quel 5
aggiungendo anche la stringa al vettore come riportata nella macro
inoltre devi aumentare i cicli
Codice: Seleziona tutto
For C = 1 To 5

da 5 (attuali) a 10 o 15 (quanti sono i nomi da ricercare e quindi i vettori Cancella
se, invece, sono di meno, ad esempio 2, metterai
Codice: Seleziona tutto
Dim Cancella(2) as string


Cancellerai le righe:
Codice: Seleziona tutto
Cancella(3) = "PAPERINA"
Cancella(4) = "PLUTO"
Cancella(5) = "PAPERONE"

e inserirai 2 in questo codice
Codice: Seleziona tutto
For C = 1 To 2


I nomi nei vettori vanno messi, in questo caso, in maiuscolo

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Flash30005 » 05/10/09 14:04

(Ciao Antony, mentre scrivevo avevi già postato) :lol:
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi alexthevoice » 05/10/09 14:45

Grazie mille ragazzi, gentilissimi... penso usarò il filtro automatico, va benissimo :)
alexthevoice
Newbie
 
Post: 2
Iscritto il: 05/10/09 10:50

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi libraio » 05/03/11 18:41

Ho trovato questa macro di Anthony che "farebbe al caso mio", ma applicata ad un foglio Excel 2003 non funziona: una volta lanciata fa il suo scrolling, ma al termine le righe individuate non vengono eliminate. Dove sbaglio?

Riporto il codice adattato alle mie esigenze.

Sub Elimina_Righe_inutili()
Dim Cancella(5) As String
Cancella(1) = "CLIENTI"
Cancella(2) = "TOTALI"
Cancella(3) = "LIBRERIA"
For C = 1 To 3
UR = Worksheets("ClientiXIstituto").Range("A" & Rows.Count).End(xlUp).Row
For CR = UR To 2 Step -1
UC = Worksheets("ClientiXIstituto").Cells(CR, Columns.Count).End(xlToLeft).Column

Rows(CR & ":" & CR).Select
For CC = 1 To UC
If Cancella(C) = UCase(Cells(CR, CC).Value) Then Rows(CR & ":" & CR).Delete Shift:=xlUp
Next CC
Next CR
Next C
End Sub '

Ed aggiungo, se utile, che "CLIENTE" è in colonna A; "TOTALI" e "LIBRERIA" sono in colonna B.

Spero che qualcuno (magari lo stesso Anthony...) possa rilevare e corrergmi eventuali errori.
Grazie
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Anthony47 » 05/03/11 20:47

Dove sbaglio?
Siamo su un forum di excel, non di stregoneria: se non dici che cosa vuoi fare non riesco a dire dove e' l' errore.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi libraio » 07/03/11 17:06

Hai ragione Anthony,
ma spesso considero Excel una stregoneria...
Ho tentato di adattare la macro che Flash aveva pubblicato il 05/10/09, per eliminare da un foglio Excel contenente un migliaio di righe, le righe contenenti in una cella le voci "CLIENTI", "TOTALI", "LIBRERIA".
Le celle possono contenere anche altre voci, associate a quelle segnalate (es. CLIENTI attuali, CLIENTI 'data'; TOTALI mensili, TOTALI annuali; ecc.). Le celle con le voci cercate possono essere in colonne diverse.
Grazie
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Anthony47 » 07/03/11 23:36

Prova a sostituire la riga con la If come segue:
Codice: Seleziona tutto
For CC = 1 To UC
If Cancella(C) = UCase(Cells(CR, CC).Value)=Cancella(1) Or UCase(Cells(CR, CC).Value)=Cancella(2) or UCase(Cells(CR, CC).Value)=Cancella(3)  Then Rows(CR & ":" & CR).Delete Shift:=xlUp
Next CC

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi libraio » 09/03/11 01:15

Grazie Anthony,
ma sarà l'ora ormai tarda, saranno i molteplici tentativi: non riesco ad applicare la macro, malgrado la tua correzione.
Una volta lanciata, la macro fa il suo "bello"scrolling" del foglio, ma non cancella nulla...
Puoi cortesemente verificarmi il foglio di prova? :oops:
http://ul.to/220aa1
Spero che con le arance sia andato tutto bene!... ;)
libraio
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Anthony47 » 09/03/11 14:32

In realta' non avevo afferrato che il confronto doveva cercare quelle parole all' interno di una stringa piu' complessa.
La macro aggiornata e':
Codice: Seleziona tutto
Sub Pulisci()
Dim Cancella(3) As String
Cancella(1) = "*CLIENTI*"
Cancella(2) = "*TOTALE*"
Cancella(3) = "*LIBRERIA*"
For C = 1 To 3
UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For CR = UR To 2 Step -1
    UC = Worksheets("Foglio1").Cells(CR, Columns.Count).End(xlToLeft).Column
    Rows(CR & ":" & CR).Select
    For CC = 1 To UC
        If UCase(Cells(CR, CC).Value) Like Cancella(1) Or UCase(Cells(CR, CC).Value) Like Cancella(2) _
            Or UCase(Cells(CR, CC).Value) Like Cancella(3) Then Rows(CR & ":" & CR).Delete Shift:=xlUp
    Next CC
Next CR
Next C
End Sub

Nota la diversa definizione del contenuto di Cancella(1-2-3) e l' uso di Like invece che =
Non e' ottimizzata ma credo che sia idonea per l' uso che ne devi fare, ma se hai problemi di velocita' di esecuzione possiamo migliorarla.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi libraio » 09/03/11 21:03

Perfetto!
Grazie Anthony
libraio
Utente Senior
 
Post: 329
Iscritto il: 04/01/10 20:31

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi ipsoware » 01/05/13 09:23

alexthevoice ha scritto:Salve ragazzi, io devo eliminare delle righe sun un foglio di lavoro con 30.000 righe, voglio eliminare tutte le righe che contengono la parola "pippo", tutte quelle che contengono la parola "topolino" etc etc...

Vi avviso che non sono esperto in fatto di macro, non ne so proprio nulla...

Rimango speranzioso in attesa...

Cordiali saluti

Alessandro


Anch'io ho lo stesso problema devo eliminare delle rige che contengono determinate parole.
Ho applicato la macro alle mio file ma la macro fa solo uno scrolling e non elimina nulla l'ho tenuta in esecuzione per una notte intera ma alla fine continuava a fare lo scrolling e basta.
Riporto il codice spero che qualcuno mi possa aiutare.

Dim Cancella(30) As String
Cancella(1) = "SYMANT"
Cancella(2) = "LICENZE"
Cancella(3) = "MULTILICENZE"
Cancella(4) = "VMWARE"
Cancella(5) = "GARANZIA"
Cancella(6) = "MAINTENAN"
Cancella(7) = "PREVENTIVE"
Cancella(8) = "ESTENSIONE"
Cancella(9) = "SW BTO"
Cancella(10) = "MCAFEE"
Cancella(11) = "RED HA"
Cancella(12) = "WINDOWS SERVER CAL"
Cancella(13) = "ANTI VIRUS"
Cancella(14) = "PANDA"
Cancella(15) = "TREND MICRO"
Cancella(16) = "NUANCE"
Cancella(17) = "APPLICATION"
Cancella(18) = "ENTERPRISE"
Cancella(19) = "COREL"
Cancella(20) = "APPLICATIVI"
Cancella(21) = "VISUAL STDIO"
Cancella(22) = "- MICROS"
Cancella(23) = "ADOBE"
Cancella(24) = "LICENZA"
Cancella(25) = "VEEAM"
Cancella(26) = "AGFA"
Cancella(27) = "MAINTENANCE"
Cancella(28) = "LOTUS"
Cancella(29) = "EXCHANGE"
Cancella(30) = "OBBLIGAT ISS"


For C = 1 To 30
UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
For CR = UR To 2 Step -1
UC = Worksheets("Foglio1").Cells(CR, Columns.Count).End(xlToLeft).Column

Rows(CR & ":" & CR).Select
For CC = 1 To UC
If Cancella(C) = UCase(Cells(CR, CC).Value) Then Rows(CR & ":" & CR).Delete Shift:=xlUp
Next CC
Next CR
Next C
End Sub
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi scossa » 01/05/13 10:38

ipsoware ha scritto:Anch'io ho lo stesso problema devo eliminare delle rige che contengono determinate parole.
Ho applicato la macro alle mio file ma la macro fa solo uno scrolling e non elimina nulla l'ho tenuta in esecuzione per una notte intera ma alla fine continuava a fare lo scrolling e basta.
Riporto il codice spero che qualcuno mi possa aiutare.


Non ho capito come sono distribuiti i tuoi dati, per cui prova così:

Codice: Seleziona tutto
Public Sub prova()
  Dim Cancella(30) As String
  Cancella(1) = "SYMANT"
  Cancella(2) = "LICENZE"
  Cancella(3) = "MULTILICENZE"
  Cancella(4) = "VMWARE"
  Cancella(5) = "GARANZIA"
  Cancella(6) = "MAINTENAN"
  Cancella(7) = "PREVENTIVE"
  Cancella(8) = "ESTENSIONE"
  Cancella(9) = "SW BTO"
  Cancella(10) = "MCAFEE"
  Cancella(11) = "RED HA"
  Cancella(12) = "WINDOWS SERVER CAL"
  Cancella(13) = "ANTI VIRUS"
  Cancella(14) = "PANDA"
  Cancella(15) = "TREND MICRO"
  Cancella(16) = "NUANCE"
  Cancella(17) = "APPLICATION"
  Cancella(18) = "ENTERPRISE"
  Cancella(19) = "COREL"
  Cancella(20) = "APPLICATIVI"
  Cancella(21) = "VISUAL STDIO"
  Cancella(22) = "- MICROS"
  Cancella(23) = "ADOBE"
  Cancella(24) = "LICENZA"
  Cancella(25) = "VEEAM"
  Cancella(26) = "AGFA"
  Cancella(27) = "MAINTENANCE"
  Cancella(28) = "LOTUS"
  Cancella(29) = "EXCHANGE"
  Cancella(30) = "OBBLIGAT ISS"
 
  UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
 
  For CR = UR To 2 Step -1
    UC = Worksheets("Foglio1").Cells(CR, Columns.Count).End(xlToLeft).Column
    For CC = UC To 1 Step -1
      If Not IsError(Application.Match(Cells(CR, CC).Value, Cancella, 0)) Then
        Rows(CR & ":" & CR).Delete Shift:=xlUp
      End If
    Next CC
  Next CR
 
End Sub
Bye!
scossa

Se tu hai una mela, e 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)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi scossa » 01/05/13 11:08

scossa ha scritto:
Non ho capito come sono distribuiti i tuoi dati, per cui prova così:

Codice: Seleziona tutto
Public Sub prova()
  Dim Cancella(30) As String
  Cancella(1) = "SYMANT"

....CUT


  For CR = UR To 2 Step -1
    UC = Worksheets("Foglio1").Cells(CR, Columns.Count).End(xlToLeft).Column
    For CC = UC To 1 Step -1
      If Not IsError(Application.Match(Cells(CR, CC).Value, Cancella, 0)) Then
        Rows(CR & ":" & CR).Delete Shift:=xlUp
      End If
    Next CC
  Next CR
 
End Sub


Altrimenti, se le parole dell'array sono insieme ad altre, prova così:

Codice: Seleziona tutto
Public Sub prova()
  Dim Cancella(1 To 30) As String
  Dim j As Long
  Dim rng As Range
  Dim rngCol As Range
  Dim ws As Worksheet
  Dim vRet As Variant
 
  Cancella(1) = "SYMANT"
  Cancella(2) = "LICENZE"
  Cancella(3) = "MULTILICENZE"
  Cancella(4) = "VMWARE"
  Cancella(5) = "GARANZIA"
  Cancella(6) = "MAINTENAN"
  Cancella(7) = "PREVENTIVE"
  Cancella(8) = "ESTENSIONE"
  Cancella(9) = "SW BTO"
  Cancella(10) = "MCAFEE"
  Cancella(11) = "RED HA"
  Cancella(12) = "WINDOWS SERVER CAL"
  Cancella(13) = "ANTI VIRUS"
  Cancella(14) = "PANDA"
  Cancella(15) = "TREND MICRO"
  Cancella(16) = "NUANCE"
  Cancella(17) = "APPLICATION"
  Cancella(18) = "ENTERPRISE"
  Cancella(19) = "COREL"
  Cancella(20) = "APPLICATIVI"
  Cancella(21) = "VISUAL STDIO"
  Cancella(22) = "- MICROS"
  Cancella(23) = "ADOBE"
  Cancella(24) = "LICENZA"
  Cancella(25) = "VEEAM"
  Cancella(26) = "AGFA"
  Cancella(27) = "MAINTENANCE"
  Cancella(28) = "LOTUS"
  Cancella(29) = "EXCHANGE"
  Cancella(30) = "OBBLIGAT ISS"
   
  Set ws = ActiveSheet
  Set rng = ws.UsedRange
  For Each rngCol In rng.Columns
    For j = LBound(Cancella) To UBound(Cancella)
      vRet = Application.Match("*" & Cancella(j) & "*", rngCol, 0)
      If Not IsError(vRet) Then
        'MsgBox Cancella(j) & ": " & vRet
        rng.Rows(vRet).Delete Shift:=xlUp
      End If
    Next
  Next
  Set ws = Nothing
  Set rng = Nothing
  Set rngCol = Nothing
 
End Sub
Bye!
scossa

Se tu hai una mela, e 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)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi Anthony47 » 01/05/13 21:56

E se con quanto proposto da scossa non risolvi allora spiega bene come sono organizzati i tuoi dati, quante colonne sono in ballo, che tipo di informazioni ad esempio possono contenere (un paio di esempi).
Idem se i tempi di elaborazione fossero eccessivi per il tipo di processo ga gestire.

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi ipsoware » 02/05/13 20:34

Ho provato ma non funziona correttamente. Non cancella nessuna riga.
Ti spiego come è formattato il file (CSV) e le operazioni che deve effettuare la macro.
Le parole di ricerca sono insieme ad altre parole e sono individuabili nella colonna D. Il file ha 450.000 righe e 20 colonne.
La macro in presenza delle parole di ricerca deve eliminare la riga. Io ho provato una macro che funziona ma è impostata solo per una sola parola (SYMANT) alla volta e non so modificarla per tutte le altre parole contemporaneamente:

Sub Elimina()
Dim i
Dim Stringa
Stringa = "*SYMANT*"
For i = Range("D" & Rows.Count).End(xlUp).Row To 1 Step -1
If Cells(i, "D") Like Stringa Then
Cells(i, "D").Select
Selection.EntireRow.Delete
End If
Next i
End Sub
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi scossa » 02/05/13 21:05

ipsoware ha scritto:Ho provato ma non funziona correttamente. Non cancella nessuna riga.
Ti spiego come è formattato il file (CSV) e le operazioni che deve effettuare la macro.
Le parole di ricerca sono insieme ad altre parole e sono individuabili nella colonna D. Il file ha 450.000 righe e 20 colonne.


Se posti un file di esempio, in modo da vedere i dati reali, forse arriviamo ad una soluzione.
Bye!
scossa

Se tu hai una mela, e 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)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi ipsoware » 02/05/13 21:41

scossa ha scritto:
ipsoware ha scritto:Ho provato ma non funziona correttamente. Non cancella nessuna riga.
Ti spiego come è formattato il file (CSV) e le operazioni che deve effettuare la macro.
Le parole di ricerca sono insieme ad altre parole e sono individuabili nella colonna D. Il file ha 450.000 righe e 20 colonne.


Se posti un file di esempio, in modo da vedere i dati reali, forse arriviamo ad una soluzione.

Lo puoi scaricare in questo link:
http://www.ecartucce.it/cartel1.csv

Grazie
ipsoware
Utente Junior
 
Post: 40
Iscritto il: 01/05/13 07:25
Località: Viterbo

Re: [EXCEL] Eliminare righe che contengono un valore

Postdi scossa » 02/05/13 22:25

ipsoware ha scritto:
scossa ha scritto:
ipsoware ha scritto:Ho provato ma non funziona correttamente. Non cancella nessuna riga.
Ti spiego come è formattato il file (CSV) e le operazioni che deve effettuare la macro.
Le parole di ricerca sono insieme ad altre parole e sono individuabili nella colonna D. Il file ha 450.000 righe e 20 colonne.


Se posti un file di esempio, in modo da vedere i dati reali, forse arriviamo ad una soluzione.

Lo puoi scaricare in questo link:
http://www.ecartucce.it/cartel1.csv

Grazie


Io ho sostituito
Cancella(1) = "SYMANT"
con
Cancella(1) = "Kyocera"
e mi ha regolarmente cancellato la riga 4
/TK82K /TK82K-Toner Nero-Pagine 25.000--Kyocera etc. etc.

Per cui sbagli qualcosa tu.

Comunque non capisco perché mi passi un file csv quando hai già un file excel disponibile (hai detto di aver applicato la mia macro).
Se poi la parola è da cercare SOLO in colonna D il codice si può semplificare, comunque già così com'è funziona.
Bye!
scossa

Se tu hai una mela, e 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)
Avatar utente
scossa
Utente Senior
 
Post: 427
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Eliminare righe che contengono un valore":

BTp Valore
Autore: MarioLombardi
Forum: Forum off-topic
Risposte: 2

Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti