Condividi:        

macro per eliminare righe con determinati valori

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

macro per eliminare righe con determinati valori

Postdi sparkle76 » 02/08/16 16:32

Ciao a tutti, devo realizzare una Macro per eliminare righe su un foglio excel contenenti determinati valori, sono arrivato a questa soluzione ma non funziona correttamente, potete darle un ' occhiata e correggere miei eventuali errori?
vi ringrazio anticipatamente a tutti per il vostro supporto:

MACRO:Sub BUSINESS()
Dim Cancella(3) As String
Cancella(1) = "*S.R.L.*"
Cancella(2) = "*S.A.S.*"
Cancella(3) = "*SCUOLA*"
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

Lanciando la macro così fatta il file viene analizzato e le righe contenenti le parole negli array vengono cancellate, ma se aggiungo più parole e modifico sia il valore " Dim Cancella(3) As String" aumentando da 3 a 10 e variando anche " For C= 1 To 10 la macro si blocca e mi tocca forzare la chiusura del foglio perdendo tutte le modifiche.
quello che devo ottenere dalla macro è ripulire una lista di nominativi da clienti Business.
allego anche il file originale così da poter valutare meglio la mia macro e glki errori che cisono.
grazie ancora a tutti per l'aiuto che vogliate fornirmi
link file: https://www.dropbox.com/s/zczctpl2siprq ... .xlsx?dl=0
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Sponsor
 

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 02/08/16 17:17

Scusate mi sono scordato di dire che la release di office che sto utilizzando è 2013,e come potete vedere dal file originale non avendo le p.iva per discriminare i clienti business devo necessariamente utilizzare una macro che poi assegnerò ad un pulsante perchè è una operazione che si ripeterà diverse volte.
Ovviamente soluzioni diverse sono ben accette.
grazie a tutti
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi alfrimpa » 02/08/16 17:58

Scusa Sparkle

Dal file non riesco a capire quali sono i record da eliminare.

Sulla base dei dati contenuti nel file puoi fare qualche esempio pratico?
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 02/08/16 18:26

Ciao Alfredo
tutte le attività tipo pizzeria, bar, ristorante, studio medico, circolo didattico etc etc, devono rimanere solo le persone fisiche

74122 Caso Angelo Circonvallazione Dei Fiori, 251/F 74122 Taranto (TA) ___________rimane nel file_______
74122 Pizzeria Tre Fontane Di Tartarella Cosimo Via Per Lama, 810 74122 Taranto (TA) *******devo eliminare la riga intera********
74122 Pizzeria Di Cavaliere Fabrizio Via Gregorio VII 74122 Taranto (TA) ********Devo eliminare la riga intera*********
74122 Pink Ristorante Pizzeria Ricevimenti - C. Caracciolo Vl. Jonio, 473 74122 *********devo eliminare la riga intera*********
74122 D'Accio' Francesco Via Anello Di S. Cataldo, 3/INT/5 74122 San Vito (TA) ________rimane nel file__________
74122 Accolla Mariangela Via S. Domenico, 71 74122 Lama (TA) ______rimane nel file________

Spero sia chiaro l'esempio
grazie
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi alfrimpa » 02/08/16 18:36

Si ma l'elemento discriminatorio per per determinare se il record è persona fisica o giuridica qual è?

Nella tua tabella non vedo intestazioni di campi.

Puoi specificare nelle colonne G, H e I che dati contengono?
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 02/08/16 18:54

per discriminare utilizzo la colonna B dove sono presenti i nomi delle persone fisiche e i nomi delle attività, purtroppo non ho altro modo per discriminare se non quello di analizzare delle parole specifiche tipo S.R.L. o S.A.S. oppure Circolo ,o Parrucchiere o piutosto Meccanico , Ristorante o Pizzeria Bar etc..
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi alfrimpa » 02/08/16 20:17

Tu riesci a fare un elenco completo di queste parole?
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 02/08/16 21:30

S.R.L.
S.A.S.
S.N.C.
SCUOLA
STUDIO
ISTITUTO
AGENZIA
BANCA
DITTA
EDILE
INDIVIDUALE
MARKET
ABBIGLIAMENTO
PIZZERIA
BAR
RISTORANTE
AMBULATORIO
AUTO
CARROZZERIA
MECCANICO
FIN
ASSOCIAZIONE
PARRUCHIERE
ESTETISTA
CIRCOLO
SRL(SENZA PUNTI)
SNC
SAS
ELLETR
IMPIANTI
MANUTENZIONI
INSTAL
IDRAULIC
Queste sono le maggiori usate , con la mia macro cambiando le parole ogni volta il file viene ripulito ovviamente rimane qualche nominativo più specifico ma sono pochissimi
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi Anthony47 » 03/08/16 02:04

Il file pubblicato contiene informazioni personali di migliaia di persone (nominativi, indirizzo, numero di telefono), per cui ho provveduto a rendere il link inservibile

Comunque, sulla base di quanto pubblicato, ho sviluppato questa macro:
Codice: Seleziona tutto
Sub ammuin()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=107259
Dim VArr, WArr, FiltArr() As String, SSh As Worksheet, DSh As Worksheet, WSh As Worksheet
Dim LastR As Long, LastCol As Long, I As Long, J As Long, LBVArr As Long, CCB As String
Dim WFound As Boolean
'
Set SSh = Sheets("Foglio1")     '<<< Il foglio con l'elenco originale
Set DSh = Sheets("Foglio3")     '<<< Il foglio dove verra' creato l'elenco filtrato
Set WSh = Sheets("Foglio2")     '<<< Il foglio con in col A le parole killer
'
LastR = SSh.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = SSh.Cells(2, Columns.Count).End(xlToLeft).Column
ReDim FiltArr(1 To LastR, 1 To LastCol)
VArr = SSh.Range("A1").Resize(LastR, LastCol).Value
WArr = WSh.Range("A1").Resize(WSh.Cells(Rows.Count, 1).End(xlUp).Row, 1)
LBVArr = LBound(VArr, 1)
For I = LBVArr To UBound(VArr, 1)
DoEvents
    WFound = False
    CCB = " " & UCase(VArr(I, LBVArr + 1)) & " "
    For J = LBVArr To UBound(WArr, 1)
        If InStr(1, CCB, " " & WArr(J, 1) & " ", vbTextCompare) > 0 Then
            WFound = True
            Exit For
        End If
    Next J
    If Not WFound Then
        frow = frow + 1
        For J = LBVArr To UBound(VArr, 2)
            FiltArr(frow, J) = VArr(I, J)
        Next J
    End If
Next I
DSh.Cells.ClearContents
DSh.Range("A1").Resize(frow, LastCol).Value = FiltArr
MsgBox ("Completato...")
End Sub

Le righe marcate <<< vanno adattate al tuo caso, come da commenti inseriti nelle righe.

La macro assume che in colonna A del foglio indicato come WSh ci siano (scritte in Maiuscolo!) tutte le stringhe che, se trovate all'interno della colonna B dei dati di partenza, eliminano l'intera riga dall'output; l'elenco viene ricreato in un nuovo foglio, che SARA' AZZERATO SENZA PREAVVISO prima di essere ricreato dalla macro.
Vista la presenza di stringhe quali FIN, ELETTR, INSTAL e altre immagino che tu le consideri abbreviazioni, in modo da poter simulare (ad esempio con ELETTR) le parole Elettricista, Elettrauto, Elettroforniture etc; dissento pero' da questa impostazione, che avrebbe ad esempio eliminato tutti i Bar, ma anche tutti i Barbato e tutte le Barbara. Pertanto nella mia interpretazione saranno eliminate solo le righe che contengono la stringa come "parola intera"; quindi nell'elenco delle parole killer dovrai scrivere tutte le parole (nell'esempio di prima: ELETTRICISTA, ELETTRAUTO, ELETTROFORNITURE, etc)

Prova e fai sapere.

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

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 03/08/16 14:24

Ciao Anthony,
grazie intanto per il tuo supporto, ho provato la macro cos' comè ma non mi elimina nulla mi restituisce il file in maniera identica, ovviamente le parole killer sono in maiuscolo
perdonami se ho allegato il file originale ma era l'unico modo per far vedere i dati nella loro formattazione originale
Grazie ancora
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi alfrimpa » 03/08/16 14:27

Prova ad inserire in testa al modulo (al di fuori della macro) l'istruzione

Codice: Seleziona tutto
Option Compare Text
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 03/08/16 14:30

Ciao facendo un debug mi segnala questa stringa come errore LBVArr = LBound(VArr, 1) tipo non corrispondente
errore di run-time 13 tipo non corrispondente
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 03/08/16 15:28

Ciao Alfredo provando anche con la tua modifica il risultato non cambia mi riscrive sul foglio 3 gli stessi nominativi
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 03/08/16 15:37

se può essere una soluzione migliorativa la macro potrebbe creare due fogli uno con le persone fisiche e l'altro con le attività
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi sparkle76 » 03/08/16 17:03

Sub PULISCI()
Dim Cancella(1 To 35) As String
Cancella(1) = "*S.R.L.*"
Cancella(2) = "*S.A.S.*"
Cancella(3) = "*SNC*"
Cancella(4) = "*S.N.C.*"
Cancella(5) = "*SAS*"
Cancella(6) = "*SCUOLA*"
Cancella(7) = "*CIRCOLO*"
Cancella(8) = "*AMBULATORIO*"
Cancella(9) = "*DITTA*"
Cancella(10) = "*EDILE*"
Cancella(11) = "*MACELLERIA*"
Cancella(12) = "*AUTO*"
Cancella(13) = "*CARROZZERIA*"
Cancella(14) = "*ARREDAMENTI*"
Cancella(15) = "*STUDIO*"
Cancella(16) = "*PIZZERIA*"
Cancella(17) = "*RISTORANTE*"
Cancella(18) = "*BAR*"
Cancella(19) = "*TABACCHI*"
Cancella(20) = "*PARRUCHIERE*"
Cancella(21) = "*ESTETISTA*"
Cancella(22) = "*MECCANICO*"
Cancella(23) = "*FALEGNAME*"
Cancella(24) = "*SRL*"
Cancella(25) = "*INDIVIDUALE*"
Cancella(26) = "*ASSOCIAZIONE*"
Cancella(27) = "*OSPEDALE*"
Cancella(28) = "*MARKET*"
Cancella(29) = "*SUPERMERCATO*"
Cancella(30) = "*AGENZIA*"
Cancella(31) = "*BANCA*"
Cancella(32) = "*CALZATURE*"
Cancella(33) = "*PANIFICIO*"
Cancella(34) = "*CALZE*"
Cancella(35) = "*ISTITUTO*"

For C = 1 To 35
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) Or UCase(Cells(CR, CC).Value) Like Cancella(4) _
Or UCase(Cells(CR, CC).Value) Like Cancella(5) Or UCase(Cells(CR, CC).Value) Like Cancella(6) _
Or UCase(Cells(CR, CC).Value) Like Cancella(7) Or UCase(Cells(CR, CC).Value) Like Cancella(8) _
Or UCase(Cells(CR, CC).Value) Like Cancella(9) Or UCase(Cells(CR, CC).Value) Like Cancella(10) _
Or UCase(Cells(CR, CC).Value) Like Cancella(11) Or UCase(Cells(CR, CC).Value) Like Cancella(12) _
Or UCase(Cells(CR, CC).Value) Like Cancella(13) Or UCase(Cells(CR, CC).Value) Like Cancella(14) _
Or UCase(Cells(CR, CC).Value) Like Cancella(15) Or UCase(Cells(CR, CC).Value) Like Cancella(16) _
Or UCase(Cells(CR, CC).Value) Like Cancella(17) Or UCase(Cells(CR, CC).Value) Like Cancella(18) _
Or UCase(Cells(CR, CC).Value) Like Cancella(19) Or UCase(Cells(CR, CC).Value) Like Cancella(20) _
Or UCase(Cells(CR, CC).Value) Like Cancella(21) Or UCase(Cells(CR, CC).Value) Like Cancella(22) _
Or UCase(Cells(CR, CC).Value) Like Cancella(23) Or UCase(Cells(CR, CC).Value) Like Cancella(24) _
Or UCase(Cells(CR, CC).Value) Like Cancella(25) Or UCase(Cells(CR, CC).Value) Like Cancella(26) _
Or UCase(Cells(CR, CC).Value) Like Cancella(27) Or UCase(Cells(CR, CC).Value) Like Cancella(28) _
Or UCase(Cells(CR, CC).Value) Like Cancella(29) Or UCase(Cells(CR, CC).Value) Like Cancella(30) Or UCase(Cells(CR, CC).Value) Like Cancella(31) Or UCase(Cells(CR, CC).Value) Like Cancella(32) _
Or UCase(Cells(CR, CC).Value) Like Cancella(33) Or UCase(Cells(CR, CC).Value) Like Cancella(34) _
Or UCase(Cells(CR, CC).Value) Like Cancella(35) Then Rows(CR & ":" & CR).Delete Shift:=xlUp
Next CC
Next CR
Next C

End Sub
questa mia Macro risulta funzionante forse non è ottimizzata , accetto consigli su come ottimizzarla o migliorarla
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi Flash30005 » 04/08/16 03:51

La macro di Anthony funziona
forse non hai i dati come dovrebbero essere
Non avendo il tuo file originale ho fatto delle prove e se le stringhe non sono nella colonna B la macro va in errore

Ti invio direttamente il file-test con la macro download

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: macro per eliminare righe con determinati valori

Postdi sparkle76 » 04/08/16 09:45

ciao Flash ti ringrazio per il tuo supporto,effettivamente era un mio problema di impostazione su office (devo salvare le modifiche e poi riaprire il foglio per vedere la macro funzionare)
ringrazio tutti per l'aiuto e specialmente Anthony per la sua macro
Grazie a tutti
sparkle76
Utente Junior
 
Post: 11
Iscritto il: 02/08/16 15:34

Re: macro per eliminare righe con determinati valori

Postdi Flash30005 » 04/08/16 10:49

sparkle76 ha scritto:effettivamente era un mio problema di impostazione su office (devo salvare le modifiche e poi riaprire il foglio per vedere la macro funzionare)


Qui non ho capito io

Le uniche impostazioni di office che non fanno funzionare una macro sono quelle relative alla sicurezza, ovvero aver disabilitato le macro.
Poi quale modifiche devi salvare?
Se apro una nuova cartella (ha 3 fogli di default)
nel primo inserisco le righe
nel secondo le parole da cercare che occorrono per eliminare le righe

nel vba inserisco la macro
avvio la macro (senza salvare nulla)
avrò nel foglio3 le righe senza le quelle con le parole da escludere.

Ora posso anche salvare il file

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: macro per eliminare righe con determinati valori

Postdi Anthony47 » 04/08/16 23:28

Vedi il messaggio di Flash, sopra.

La macro che ho pubblicata, lavorando sul file da te pubblicato con le parole killer da te elencate nel messaggio del 2-8 sera (NON quelle usate nella tua macro successiva), produce dopo 3-4 secondi una tabella di 13219 record, contro un elenco iniziale di 14918 record; basta inserire le parole in Foglio2, inserire, personalizzare ed eseguire la Sub ammuin.
Hai inserito le parole killer in Foglio2? (o nel foglio indicato nella macro).

Se la tua macro funziona come da attese allora, nella mia filosofia, e' perfetta; vedo comunque che hai deciso lo stesso di cancellare tutti i Barbato /Barbieri /Dibari /Lombardi /Barbara /etc.

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


Torna a Applicazioni Office Windows


Topic correlati a "macro per eliminare righe con determinati valori":


Chi c’è in linea

Visitano il forum: Nessuno e 51 ospiti