Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[excel] macro elimina righe in base al valore cella

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

Re: [excel] macro elimina righe in base al valore cella

Postdi shadowboy » 12/10/09 16:01

ciao a tutti, rispolvero questo topic perchè non riesco ad adattare la macro. Devo cancellare tutte le righe dove i valori della colonna AM son compresi tra 0% e 100%, partendo dalla riga 16 per arrivare alla 8000. mi potete dare una dritta? grazie!
shadowboy
Newbie
 
Post: 1
Iscritto il: 12/10/09 15:53

Sponsor
 

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 12/10/09 20:36

Ciao Shadowboy e benvenuto

Quello che richiedi è semplicissimo selezioni tutte le righe dala riga 16 alla riga 8000 e le elimini del resto non vedo valori non compresi tra 0% e 100%

Se c'è qualche altra cosa che devi spiegare... Fai sapere

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 15/10/09 09:20

Flash30005 ha scritto:Ciao Shadowboy e benvenuto

Quello che richiedi è semplicissimo selezioni tutte le righe dala riga 16 alla riga 8000 e le elimini del resto non vedo valori non compresi tra 0% e 100%

Se c'è qualche altra cosa che devi spiegare... Fai sapere

Ciao


Flash, scusa
con questa istruzione io cancello le righe
If Selection.Value = 70 Then Selection.EntireRow.Delete

la funzione per copiarle su un altro foglio qual'e?

grazie
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 15/10/09 21:20

Ciao Nev...

Non so perché hai postato qui :roll:

Comunque se ti riferisci alla macro dell'altro tuo post puoi fare così
Codice: Seleziona tutto
Sub CopiaRiga()
righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = righe To 1 Step -1
Cells(I, 1).Select
If Selection.Value = 70 Then Rows(I & ":" & I).Copy Destination:=Worksheets("Foglio2").Rows(I & ":" & I)
Next I
End Sub


Ti ritroverai nel foglio2 le righe nella stessa posizione del foglio origine (con righe vuote)
Altrimenti con questa macro verranno inserite una dopo l'altra
Codice: Seleziona tutto
Sub CopiaRiga()
Righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Righe
Cells(I, 1).Select
UR = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1
If Selection.Value = 70 Then Rows(I & ":" & I).Copy Destination:=Worksheets("Foglio2").Rows(UR & ":" & UR)
Next I
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 16/10/09 07:56

Ciao Flash,
ho postato qui perche in definitiva mi sembrava un doppione l'altro mio post.

ho fatto la modifica,ma penso di sbagliare qualche cosa poichè lancio la macro ma non mi elimina le righe ed il cursore si posiziona sulla prima cella dell'ultima riga dell'elenco...questa e lamodifica che ho fatto

Sub del200()
Righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = Righe To 1 Step -1
Cells(I, 10).Select
' If Selection.Value = 71 Then Selection.EntireRow.Delete '<<<< o >= 95 (se devi eliminare tutte le righe con valore somma da 95 o superiore)
Next I
End Sub

Sub CopiaRiga()
Righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Righe
Cells(I, 1).Select
UR = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1
If Selection.Value = 100 Then Rows(I & ":" & I).Copy Destination:=Worksheets("Foglio2").Rows(UR & ":" & UR)
Next I
End Sub

Ciao
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 16/10/09 15:49

Hai postato due macro
la prima elimina le righe quando nella colonna J (attenzione nella colonna J deve trovare il valore che cerchi altrimenti non succederà nulla) trova il valore 71, chiaramente devi togliere il commento ' (l'apostrofo) prima della If

La seconda macro copia le righe con valore 100 nella colonna A del foglio attivo e le scrive (incolla) nel foglio2
se usi il codice
Codice: Seleziona tutto
Cells(I, 1).Select
cercherà nella prima colonna (quell'1 indica appunto colonna A)
se il valore 100 si trova nella colonna J dovrai mettere
Codice: Seleziona tutto
Cells(I, 10).Select

se L
Codice: Seleziona tutto
Cells(I, 12).Select


Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 16/10/09 16:43

Ciao Flash,
dunque ho un po' di problemi, questa e la maco che uso

Sub CopiaRiga()
Righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Righe
Cells(I, 12).Select
UR = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1
If Selection.Value >= 100 Then Rows(I & ":" & I).Copy Destination:=Worksheets("Foglio2").Rows(UR & ":" & UR)
Next I
End Sub

1) problema.
Lanciando questa macro mi copia solo la prima riga che ha valore 100 e non quelle con valore inferiore;
2) problema
invece di scrivere il valore 100 nella macro vorrei che lei leggesse il valore che scrivo in L1
3) problema
vorrei poter discriminare il foglio dove copiare le righe es: >=100 foglio2 <100 foglio3 , ect ect,ovviamente il foglio in cui copiare lo vorrei indicare nel foglio attivo, cosi come faccio per il valore indicato in L1.

Spero di essere statochiaro
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Anthony47 » 17/10/09 00:46

La macro copia tutte le righe che hanno in col L un valore >=100; e' scritto nell' istruzione If Selection.Value >= 100etc etc; se vuoi copiare quelle inferiori a 100 devi scrivere <100 o la condizione che vuoi tu.
Se invece di 100 vuoi usare il valore di cella L1 scriverai ad esempio < Range("L1").value
Se vuoi scrivere in fogli diversi a seconda della condizione, allora
-inserirai due (o piu') righe di If usando come Destination questa formulazione:
Codice: Seleziona tutto
Destination:=Sheets("FoglioX").Cells(Rows.Count, 1).End(xlUp).offset(1,0)
(ogni riga ha il suo FoglioX di destinazione)
-puoi eliminare la riga UR=etc etc

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 17/10/09 09:43

Grazie Antony,
ho capito come indicare il valore della cella ma la soluzione per i fogli da te indicata presuppone che io già abbia i vari fogli nominati es: foglio1 foglio2 ect. Io vorrei che, se anche avessi il solo foglio1 con i dati e le condizioni, la macro creasse da sola i fogli occorrenti per le condizioni indicate altrimenti mi da errore. Poi, un altro chiarimento, con la macro che ho modificato mi copia l'intero foglio, ma se volessi copiare solo le prime 10 colonne che devo modificare?

Ti scrivo la macro che ho fatto
Codice: Seleziona tutto
Sub CopiaRiga()
Righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Righe
Cells(I, 11).Select
UR = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1
If Selection.Value = Range("L2").Value Then Rows(I & ":" & I).Copy Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
If Selection.Value = Range("M2").Value Then Rows(I & ":" & I).Copy Destination:=Sheets("Foglio3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
If Selection.Value = Range("N2").Value Then Rows(I & ":" & I).Copy Destination:=Sheets("Foglio3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Next I
End Sub

    Cosi facendo diventerebbe molto lunga se dovessi creare piu fogli.
    Scrivendo ho capito anche come inserire qua la macro, ma non perchè mi tronca la riga di istruzione :oops:
    Aspetto le tue correzioni
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Anthony47 » 17/10/09 23:16

Se vuoi copiare solo le colonne A:J e non tutta la riga (intendevi questo, vero?) allora scriverai, ad esempio:
Codice: Seleziona tutto
If Selection.Value = Range("L2").Value Then Selection.Range("A1:J1").Copy etc etc

Per quanto riguarda i fogli, o imposti una routine per la gestione dell' evento Error, che richiami con On Error Goto, oppure quando generi il file lo generi con tutti i fogli che ti servono, cioe' tutti quelli che predisponi la macro a gestire.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 18/10/09 17:47

Anthony47 ha scritto:Se vuoi copiare solo le colonne A:J e non tutta la riga (intendevi questo, vero?) allora scriverai, ad esempio:
Codice: Seleziona tutto
If Selection.Value = Range("L2").Value Then Selection.Range("A1:J1").Copy etc etc

Per quanto riguarda i fogli, o imposti una routine per la gestione dell' evento Error, che richiami con On Error Goto, oppure quando generi il file lo generi con tutti i fogli che ti servono, cioe' tutti quelli che predisponi la macro a gestire.

Ciao.

Antony ciao,
la macro con quell'istruzione
If Selection.Value <= Range("L1").Value Then Selection.Range("a1:j1").Copy Destination:=Worksheets("Foglio2").Rows(UR & ":" & UR)

mi copia solo la prima riga ma io ho i dati nelle celle a1:j300, per cui la macro deve copiarmi tutte le righe che hanno il valore da me indicato in L1

se mi dai anche altre indicazioni sulla routine On Error Goto te ne sarei grato

grazie
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 19/10/09 13:24

neverlandce ha scritto:
Codice: Seleziona tutto
If Selection.Value <= Range("L1").Value Then Selection.Range("a1:j1").Copy Destination:=Worksheets("Foglio2").Rows(UR & ":" & UR)

mi copia solo la prima riga

Si, così impostata copia da A1 a J1 (Selection.Range("a1:j1").Copy )
devi impostare la variabile di numero riga I (lettera i maiuscola)
Codice: Seleziona tutto
Then Selection.Range("A" & I & ":J" & I).Copy



Aggiungo che se usi il codice di Anthony, più "fine" del mio
Codice: Seleziona tutto
Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

non occore fare il conteggio delle righe ad ogni loop, quindi puoi eliminare questa riga di codice:
Codice: Seleziona tutto
UR = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] macro elimina righe in base al valore cella

Postdi Anthony47 » 19/10/09 13:29

Per neverlandce: hai provato?
Per Flash: la tua formulazione e la mia fanno la stessa cosa. Range("A1:J1") e' infatti relativo alla selezione corrente.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 19/10/09 15:15

Anthony47 ha scritto:Per neverlandce: hai provato?
Per Flash: la tua formulazione e la mia fanno la stessa cosa. Range("A1:J1") e' infatti relativo alla selezione corrente.

Ciao.


ciao ragà ho fatto la modifica
Codice: Seleziona tutto
Sub CopiaRiga()
Righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Righe
Cells(I, 11).Select
UR = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1
If Selection.Value = Range("L2").Value Then Selection.Range("A" & I & ":J" & I).Copy Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Next I
End Sub

    ma mi copie la sola cella K2 (dove ho messo la formula per sommare i valori di ogni riga a2:j300). Ovviamente mi copia la riga dandomi l'erroe #RIF!
    Io ho, ad es. a2:j2 i numeri 2 4 8 9 12 14 15 17 18 20 ed in k2 la fomula "somma(a2:j2) che mi da 119, questo per tutte le righe.Uso la colonna K come riferimento non sapendo che istruzione mettere nella mcro per farle farela somma in automatico
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 19/10/09 19:22

Partendo dal concetto che tu hai i dati nel foglio1 (che deve essere attivo) dovrai avere tutte le righe con la condizione da te impostata nel foglio2
se hai attivo il foglio2 al momento che avviii la macro è chiaro che non va oltre il primo rigo
quindi per evitare questo
modifica la macro così
Codice: Seleziona tutto
Sub CopiaRiga()
Worksheets("Foglio1").Select
Righe = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
For I = 2 To Righe
Cells(I, 11).Select
MsgBox Selection.Value
If Selection.Value = Worksheets("Foglio1").Range("L1").Value Then Worksheets("Foglio1").Range(Cells(I, 1), Cells(I, 10)).Copy Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Next I
End Sub

Il valore che confronterai, con il codice postato, è quello che si trova in L1 del foglio1 (es.119) e ogni valore che trova nella colonna K
quando i valori sono uguali verrà copiato il Range Ax:Jx del foglio1 e incollato nel foglio2 alla prima riga vuota

Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 19/10/09 20:39

Flash,
premetto che quando lanciavo la macro posttata da me ero sul foglio1 attivo.
La tua macro non mi copia nulla e poi esce quella combpx che si ferma su ogni cella della colonna K meglio non metterla
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Anthony47 » 19/10/09 22:31

Mi accorgo che il test viene fatto su colonna 11 (K) non 1 (A), per cui la sintassi Selection.Range("A" & I & ":J" & I).Copy e' errata, come era errata la mia Selection.Range("A1:J1").Copy ; non per nulla avevo detto che facevano la stessa cosa.
Dovrebbe invece servire questa:
Codice: Seleziona tutto
If Selection.Value = Range("L2").Value Then Range("A" & I & ":J" & I).Copy Destination:= etc etc

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 20/10/09 07:47

neverlandce ha scritto:...La tua macro non mi copia nulla

Scarica questo file e dimmi cosa succede nel foglio2 dopo aver avviato la macro
(la macro è la stessa del giorno 19 ore 20:22)
neverlandce ha scritto:...
e poi esce quella combpx che si ferma su ogni cella della colonna K meglio non metterla

basta commentare il codice del messaggio o cancellare la riga
Codice: Seleziona tutto
MsgBox Selection.Value
che è servita per il mio test.

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [excel] macro elimina righe in base al valore cella

Postdi neverlandce » 20/10/09 14:44

Ciao Flash,
ho provato e funziona,mi copia nel foglio2 le 10 righe con valore 55. Ho visto che era, come hai detto tu, uguale a quella del 19 ma nn so dirti perche prima non andava.
Questa istruzione
Cells(I, 10)).Copy Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
copia le celle,l'istruzione per tagliare dal foglio1 e copiare nel foglio2 quale sarebbe?

Grazie
neverlandce
Utente Junior
 
Post: 48
Iscritto il: 27/08/09 18:09

Re: [excel] macro elimina righe in base al valore cella

Postdi Flash30005 » 20/10/09 15:36

Puoi agire in diversi modi lasciando inalterato l'ordine delle righe
La macro, nel primo passaggio,
Copia dalla colonna A a J
Cancella i dati dalla colonna A alla colonna K
e lascia righe vuote
nel secondo passaggio elimina le righe vuote.
Codice: Seleziona tutto
Sub CopiaRiga()
Worksheets("Foglio1").Select
Righe = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
For I = 2 To Righe
Cells(I, 11).Select
If Selection.Value = Worksheets("Foglio1").Range("L1").Value Then
    Worksheets("Foglio1").Range(Cells(I, 1), Cells(I, 10)).Copy Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Worksheets("Foglio1").Range(Cells(I, 1), Cells(I, 11)).Clear
    End If
Next I
Righe = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
For I = Righe To 2 Step -1
    If Range("A" & I).Value = "" Then
        Worksheets("Foglio1").Rows(I & ":" & I).Select
        Selection.Delete Shift:=xlUp
    End If
Next I
End Sub


Oppure con questa seconda macro ottieni tutto in un unico passaggio
copia la riga e la cancella ma per fare questo nel foglio destinazione avrai la sequenza delle righe in ordine rovesciato in quanto il processo di cancellazione prevede che, la riga cancellata, sposti tutte le celle in alto e ci costringe a iniziare dalla riga più in basso (l'ultima) per evitare di tralasciare alcune righe nel conteggio.
Es. se avvii il loop da 2 a 10 e stai processando la riga 3, che viene copiata ed eliminata, la riga 4 prende il posto della 3
il contatore al successivo loop va a 4 e processerà in realtà la riga 5 (saltando la ex riga 4 che è divenuta riga 3).Ecco perché si inizia a processare dall'ultima riga.
Quindi se non hai l'esigenza di replicare l'ordine originale delle righe puoi usare questa macro che è più semplice.
Codice: Seleziona tutto
Sub CopiaRiga2()
Worksheets("Foglio1").Select
Righe = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
For I = Righe To 2 Step -1
Cells(I, 11).Select
'MsgBox Selection.Value
If Selection.Value = Worksheets("Foglio1").Range("L1").Value Then
    Worksheets("Foglio1").Range(Cells(I, 1), Cells(I, 10)).Copy Destination:=Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Worksheets("Foglio1").Rows(I & ":" & I).Select
    Selection.Delete Shift:=xlUp
    End If
Next I
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[excel] macro elimina righe in base al valore cella":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti