Copia Range con ciclo condizionale
Hai un problema con Excel? 
Copia Range con ciclo condizionale
di bruce.27 data: 22/05/2015 08:44:42
Salve..sto cercando di realizzare un ciclo "For...Next" che mi analizzi una colonna dove gli specifico io il range e gli dico cosa escludere con "IF".
Io ho preso spunto dal web vedendo questo codice ma nei test che ho eseguito effettua un normale copia e incolla non capisco perchè...ed ho l' impressione che la selezione non si limiti al mio range dichiarato, poichè vedo il contorno tratteggiato che si vede quando si copia un range, ma selezioni tutta la colonna come se il range fosse B:B
Sub Copia_Se()
Dim Lista As Range
Set Lista = Worksheets("Foglio1").Range("B1:B40")
conta_righe = Lista.Rows.Count
For N = 1 To conta_righe Step 1
'Se nelle celle del Range vi è valore diverso da "" o vi è il valore
'testo diverso da "NOMINATIVI"
If Cells(N, 2).Value <> "" And Cells(N, 2).Value <> "NOMINATIVI" Then
Cells(N, 2).EntireColumn.Copy
Worksheets("Foglio1").Range("E1:E40").PasteSpecial
End If
Next
End Sub |
di Luca73 data: 22/05/2015 08:51:22
Ciao
La riga
Cells(N, 2).EntireColumn.Copy
ti dice che il programma prende la cella Cells(N, 2) poi ne seleziona la riga intera .EntireColumn e poi la copia .Copy
Se vuoi copiare solo la cella basta modificare la riga in
Cells(N, 2).Copy
di bruce.27 data: 22/05/2015 10:51:23
Hai ragione mi sento uno stupido!!
Ora che l' ho corretto però mi copia sola una cella del range che si trova quasi a fine range e nel nuovo range la ripete per tutta la selezione
di Luca73 (utente non iscritto) data: 22/05/2015 11:28:09
Ciao
1° nessuno è stupido o deve sentirsi tale. Fare domande è lecito. un paio di occhi che vedono un codice da zero talvlta vede degli errori che chi ha scritto il codice non vede.
La risposta al problema è legata all'istruzione
Worksheets("Foglio1").Range("E1:E40").PasteSpecial
Questa istruzione incolla che hai copiato in tutto il Range("E1:E40")
potresti provare con qualcosa del genere (vedi sotto). non è la sola soluzione altre sono possibili.
Inoltre ti faccio una domanda.
Perchè usi pastespecial senza specificare quale criterio quindi un semplice past?
If Range("E1").Value = "" Then
Range("E1").PasteSpecial
Else
Range("E10000").End(xlUp).Offset(1, 0).PasteSpecial
End If
End Sub
|
di bruce.27 data: 22/05/2015 12:04:37
Uso pastespecial per incollare se posso usare solo paste uso quello, il comando che intendo dare e incolla valori (sto imparando ora il VBA)
Il mio codice serve a guardare un elenco e con IF farli saltare le celle che non voglio che copi, ma così come l' ho scritto non sta selezionando tutte le celle tranne quelle che gli dico di escludere..ma ne sta selezionando una solo e la incolla per tutta il range di destinazione quello che hai scritto tu (se non ho capito male) serve solo a far trovare la cella successiva per incollare il valore copiato, il mio problema non è quello poichè gli ho già detto il range dove incollare
If Cells(N, 2).Value <> "" And Cells(N, 2).Value <> "NOMINATIVI" And....... Then
Cells(N, 2).Column.Copy
|
di bruce.27 data: 22/05/2015 13:24:55
Adesso ho capito quello che sbagliavo grazie alla tua istruzione...io indicandoli di incollare su quel range annullavo il ciclo invece con la tua istruzione ad ogni ciclo assegna una nuova cella
di Albatros54 data: 22/05/2015 17:10:49
Ho visto che la soluzione è stata trovata, ti posto il codice sotto, che potrebbe essere una soluzione piu lineare.
Ciao
Albatros54
Public Sub copia()
Dim Lista As Range
Set Lista = Range("b1:b40")
For Each cl In Lista
If cl = Empty Or cl <> "AMORE" Then
cl.Select
Selection.Copy
MsgBox cl.Address
cl.Offset(0, 4).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub
|
di bruce.27 data: 23/05/2015 08:49:21
Ciao e grazie Albatros54, ho provato il tuo codice, io inizialmente volevo ottenere il risultato che si ottiene con quel tipo di copia e poi compattare il tutto; ma invece con la soluzione di Luca73 viene già tutto compattato poichè nel ciclo prima di incollare ogni singola cella si cerca ad ogni ciclo la cella successiva che non è piena.
Ma ti ringrazio perchè hai contribuito ad ampliare il mio bagaglio cosa molto importante per me che sono agli inizi
di bruce.27 data: 23/05/2015 17:23:56
un ultima cosa..io devo copiare anche la rispettiva cella accanto ma con Cells(N,colonna).copy non riesco a metterli un AND o un & per farli copiare anche altre celle... come posso si fa a farli copiare ed incollare anche le cella di offset?
di bruce.27 data: 23/05/2015 17:29:52
Come non detto mi si è accesa un' altra lampadina e sono riuscito in questo modo
Range(Cells(N, 54), Cells(N, 55)).Copy |
Vuoi Approfondire?