Copia Range con ciclo condizionale



  • 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