Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Macro - cancellare righe che contengono determinati valori

Ultimo Aggiornamento: 04/08/2015 16:08
Post: 1
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
31/07/2015 11:48

Salve a tutti.

Non ho nessuna dimestichezza con excel e con le macro. Devo cancellare le righe che contengono un determinato valore (alfabetico).

Il foglio contiene 42.000 righe per 9 colonne.
Da questo foglio devo cancellare tutte le righe che contengono la parola "jingle" "promo"
"spot" ecc.

Ho cercato nei vari forum ma non ho trovato niente che faccia al mio caso.
Mi potete aiutare?

elx, Excel 2013
Post: 854
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
31/07/2015 13:06

Ciao

Potresti provare con questa macro

Sub cancella()
Dim miorange as range
Dim cel as range
Set miorange = Range("a1:i42000")
For Each cel in miorange
      If cel.Value = "jingle" Or cel.Value = "promo" Or cel.Value = "spot" Then
            Cel.EntireRow.ClearContents
      End If
Next cel
End Sub 


Ho supposto che il range sia a1:i42000 e che tu debba cancellare il contenuto della riga.

Io sono senza pc e non ho potuto testarla per verificare se ci sono o meno malfunzionamenti.

Provala prima su una copia di backup del file originale.

P.S. Presumo che la macro sarà un po' lenta dato l'alto mumero di celle da valutare.
[Modificato da alfrimpa 31/07/2015 13:34]

Alfredo
Post: 2.651
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 13:36

>>>che contengono la parola "jingle" "promo" "spot" ecc.
Già "quel ecc" mi dice che ci sono altre voci...

Domanda, mà uno di quei nomi sono all'interno di una cella unica, oppure ci sono altre parole insieme?
Ex A1 = "promo alter", forse "promo" è scritta da sola e senza spazi finali?
Excel 2013
Post: 855
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
31/07/2015 13:40

Io ho presunto che fossero singole voci.....

Alfredo
Post: 1
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
31/07/2015 15:44

espongo meglio
Espongo nel dettaglio la mia operazione.
Ho importato su excel un file csv. Ho chiesto di separare i valori usando come parametro la virgola. Ho quindi un foglio di lavoro con 9 colonne e 45238 righe (le prime 7 le ho nascoste perché non mi servono)In sostanza e' il report delle tracce che sono passate per il mio programma SAM

Nelle colonne compaiono
A N° B Date played C Artist D Title E Album F Year G Durat. H Type I Listeners


Le righe che devo cancellare sono quelle che contengono nella cella almeno uno dei valori dati e che possono stare sulle colonne "C o D". i valori sono parole singole tipo "jingle" oppure formate da più parole (che rimangono ovviamente nella stessa cella) esempio
"ma che canti se non capisci" oppure formate da parole e numeri esempio "spot 2011".

Ho fatto una prova con quanto mi suggerivate ma mi ha dato freccia gialla su "sub cancella"

Che faccio? Sono stato chiaro?
Grazie mille

Elx, excel 2013

Post: 856
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
31/07/2015 16:08

Ciao

Come spesso accade la situazione è ben più complessa di quanto non appariva dall'illustrazione del primo post.

Personalmente non ho capito quali sono i criteri secondo i quali le righe debbano essere cancellate/eliminate.

A questo punto ti consiglierei di allegare il tuo file di esempio (bastano poche decine di record) in cui mostri la tua situazione di partenza, i criteri di cancellazione/eliminazione delle righe e il risultato finale che vuoi ottenere.

Forse così si riuscirà a darti una mano.

Alfredo
Post: 2
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
31/07/2015 16:08

Errata Corrige
Devo eliminare le righe non cancellare. è diverso vero?

Saluti grazie ancora

elx
Post: 857
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
31/07/2015 16:24

Si è diverso.

Io avevo parlato di cancellazione/eliminazione perchè non avevo capito tu cosa intendessi fare.

L'importante è che tu individui tutti (e dico tutti) i criteri di eliminazione delle righe.

Alfredo
Post: 3
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
31/07/2015 16:39

Esempio Report_prova_forum
Come si vede dall'esempio che ho caricato, ci sono alcune righe evidenziate in rosso.
Queste sono il tipo di righe che si ripetono in modo sparso per il foglio e che devono essere eliminate.

Grazie
Post: 858
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
31/07/2015 16:46

Ma il colore rosso al testo lo hai applicato tu nell'esempio o ce l'hai già nel file di partenza?

Nel primo caso in base a quali criteri lo hai fatto?

Ripeto l'importante è che si individuino i criteri.

Alfredo
Post: 2.652
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 17:04

Mi sembra che quelle righe che vuoi cancellare non abbiano nulla in colonna E

Prova su una copia a vedere se va bene
Selezioni le 9 colonne e "Ordina" per la colonna E
Elimina le colonne in basso e dopo "Ordina" per la colonna A
Excel 2013
Post: 859
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
31/07/2015 17:12

Io sto rispondendo da cell e non posso vedere il foglio di lavoro nella sua interezza.

Alfredo
Post: 4
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
03/08/2015 15:49

Ciao
Ho bisogno di eliminare tutte le righe di un foglio di lavoro excel che contengono i seguenti valori (dopo la firma). Chi mi aiuta a fare una macro. Carico il file excel e ringrazio

Elx Excel 2013


CoolTour
CoolTOur cinese
Le interviste di 110 - Finding Ada Day
Take one @Eugenio in Via Di Gioia
Ti Amo Campionato
L'uovo di Colombo
Spegnete quel Grammofono
OFFicina3
Pure Morning
Il Toro del Mattino
marcolinashow
to
._historytracks_thewho_babaoriley
??????
Pillole di Statuto
110 on Air
Albano per Radio 110
Arisa per Radio 110
Bertallot per Radio 110
Diretta
110 Segnale Orario
%Artist%
121016_sceltanewbeat_damonalbarn
121016_sceltanewbeat_edwardsharpe
121016_sceltanewbeat_lukeroberts
121016_sceltanewbeat_segallfence
Jingle
Atlante delle Professioni
Spot 2011
Spot NightBuster2
History Tracks
Spot Infopoint
La Slot Machine di UNITO
Ma che canti se non capisci
Radio 110
Radio110
RADIO 110
RADIO 110 INTERNATIONAL
Scelta New Beat
MiTo Settembremusica
Svicol
historytracks_dookie_basketcase
historytracks_dookie_longview
historytracks_dookie_she
historytracks_dookie_welcometoparadise
historytracks_dookie_whenicomearound
historytracks_harvest_alabama
historytracks_harvest_amanneedsamaid
historytracks_harvest_areyoureadyforthecountry
historytracks_harvest_harvest
historytracks_harvest_heartofgold
historytracks_harvest_oldman
historytracks_harvest_outontheweekend
http://onair20.xdevel.com:8090
gi_18
lu_09
ma_18
ve_18
Post: 2.670
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
03/08/2015 23:19

Sperando che non ci siano errori d'utenza.
Da 46341 portarli a 30548 (con 56 opzioni opzioni differenti?)

Comunque copia i valori (dopo la firma) in foglio2 cella A1
Elimina (sposta in alto le celle sotto) del record A12=To (troppi titoli gli assomigliano)
Elimina (sposta in alto le celle sotto) del record A14=?????? (sono caratteri speciali)
Nb: questi due non li posso elaborare.

Con questo codice "Brutto" l'ho inserisci in un modulo e lo avvii.
Dato che ci mette tanto tempo, ogni tanto appare in MsgBox che ti avvisa che ha fatto 5 righe "premi OK", devi arrivare in foglio2 = 55, ci vuole 29/30 minuti. Quando arriva a MsgBox=Fatto è finito.
NB: in caso d'errori farlo ripartire è più veloce.

Sub cancella()
Dim Ur As Long, Ur2 As Long, X As Long, Y As Long, R As Long, Riga As Object, Area As Range
Dim Trovati As Long, Rg As Long, Nome As String
Ur1 = Sheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row
Ur2 = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
For Y = 1 To Ur2
Nome = "*" & Sheets("Foglio2").Cells(Y, 1) & "*"
Rg = 1
Set Area = Sheets("Foglio1").Range("A" & Rg & ":E" & Ur1)
Trovati = Application.WorksheetFunction.CountIf(Area, "*" & Sheets("Foglio2").Cells(Y, 1) & "*")
        For X = 1 To Trovati
            Set Area = Sheets("Foglio1").Range("A" & Rg & ":E" & Ur1)
            Set Riga = Area.Find(Nome, LookIn:=xlValues, LookAt:=xlWhole)
            If Not Riga Is Nothing Then
                R = Riga.Row
                Sheets("Foglio1").Rows(R & ":" & R).Delete
                Rg = R - 1
            End If
        Next X
        If Y Mod 5 = 0 Then MsgBox Y
      Next Y
MsgBox "fatto"
End Sub
Excel 2013
Post: 5
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
04/08/2015 10:56

errore di runtime 1004
Ciao Raffaele1953
grazie per l'aiuto ma credo ci sia qualcosa che non va.
Mi da questo errore:

errore di runtime 1004
Impossibile trovare la proprietà di countif per la classe WorksheetFunction

:(

elxelx
Post: 2.671
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
04/08/2015 12:00

da provare


.....
Ai proprietari del forum, adesso allega file oltre il mega?
[Modificato da raffaele1953 04/08/2015 12:44]
Excel 2013
Post: 864
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Senior
Excel 365
OFFLINE
04/08/2015 12:16

Buona giornata Elxelx ed un caro saluto a Raffaele.

Mi permetto di proporre una soluzione (spero corretta) al tuo quesito che non prevede l'uso del VBA ma solo di semplici funzioni di Excel (CONFRONTA() e O()) oltre al filtro avanzato del menù Dati (nel presupposto che i dati da ricercare siano nelle colonne C e D).

1) Sul tuo foglio1 elimina le righe in alto che non ti servono.
2) Copia sul foglio2 in A1 tutte le voci di cui al tuo post del 3/8
3) In colonna J inserisci la seguente formula e la ricopi fin dove serve:

=SE.ERRORE(CONFRONTA(C5;Foglio2!$A$1:$A$58;0);"")


4) In colonna K inserisci la seguente formula e la ricopi fin dove serve

=SE.ERRORE(CONFRONTA(D5;Foglio2!$A$1:$A$58;0);"")


5) In colonna L inserisci la seguente formula e la ricopi fin dove serve:

=O(J5<>"";K5<>"")


6) In A1:A2 inserisci i criteri di selezione per l'estrazione dei dati (z e FALSO)

7) Posizionati sull'intestazione del database e clicca su Dati e poi su Filtro Avanzato

8) Nella finestra nella casella Criteri digita A1:A2, spunta "Copia in un'altra posizione" ed i "Copia In" digita un indirizzo di cella e dai Ok.

Spero di essere stato chiaro (il file non lo prende perché troppo grande).

P.S. Come intestazione delle colonne J, K e L metti x, y e z
[Modificato da alfrimpa 04/08/2015 12:22]

Alfredo
Post: 7
Registrato il: 29/07/2015
Città: MILANO
Età: 35
Utente Junior
2013
OFFLINE
04/08/2015 16:08

Buongiorno alfrimpa.

Ti ringrazio per il consiglio ma ho già risolto con la macro di Raffaele1953 che ringrazio sentitamente in questo messaggio.

A presto

elxelx
Vota: 15MediaObject5,00118 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 09:16. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com