ciclo for



  • ciclo for
    di stefanmi data: 11/09/2013 15:10:50

    la macro 1 copia la prima riga sul foglio 2 seconda riga, se voglio far copiare per altre 4 volte la prima riga cosa devo fare? ho provato con il ciclo for ma mi copia fino alla riga 22 macro 2, grazie
     
    2
    Sub sposta_riga()
    
    Worksheets("foglio1").Select
    For y = 1 To 5
    Rows("1:1").Select
    Selection.Copy
    Worksheets("foglio2").Select
    Rows("2:2" & y).Select
    ActiveSheet.Paste
    Exit For
    Next
    
    
    End Sub
    1
    Sub Sposta_riga()
    	    Worksheets("Foglio1").Select
    	    Rows("1:1").Select
    	    Selection.Copy
    	    Worksheets("Foglio2").Select
    	    Rows("2:2").Select
    	    ActiveSheet.Paste
    	End Sub 
    
    



  • di Grograman data: 11/09/2013 15:22:55

    Qualche appunto:

    - manca la dichiarazione delle variabili
    - hai fatto un ciclo for da cui esci alla prima esecuzioen con "exit for"
    - troppi select

    Tralasciando il select, con l'editor aperto scorri il tuo codice, quando arrivi a "Worksheets("foglio2").Select" mettiti nella finestra immediata e digita:
    ?"2:2" & y

    Che restituirà:
    2:21

    Stai quindi selezionando l'intero range, ricorda che ciò che viene scritto tra virgolette per VBA è sempre letto come stringa.








     
    Option Explicit
    
    Sub sposta_riga()
    Dim y As Long
      Worksheets("foglio1").Select
      For y = 1 To 5
        Rows("1:1").Select
        Selection.Copy
        Worksheets("foglio2").Select
        Rows(y).Select
        ActiveSheet.Paste
        'Exit For
      Next
    End Sub
    
    
    
    Sub esempio()
    Dim x As Long
      x = 8
      Range("A2:A" & x).Value = "A2:A" & x
    End Sub
    



  • di totygno71 data: 11/09/2013 15:27:14

    Se vuoi farlo senza cicli...
     
    Sub sposta_riga()
    
    Sheets(1).[A1:A5].EntireRow.Copy Sheets(2).[A1]
    
    End Sub
    



  • di totygno71 data: 11/09/2013 15:29:40

    Ho letto dopo sulla seconda riga del foglio 2
     
    Sub sposta_riga()
    
    Sheets(1).[A1:A5].EntireRow.Copy Sheets(2).[A2]
    
    End Sub



  • di totygno71 data: 11/09/2013 15:48:34

    Ultima giuro... ^_^

     
    Option Explicit
    Sub sposta_riga()
    Dim i As Integer
    
    For i = 1 To 5
        
        Sheets(1).[A1].EntireRow.Copy Sheets(2).Cells(i, 1)
    
    Next i
    
    End Sub



  • di Grograman data: 11/09/2013 15:52:12

    E qui casca il totano ^_^:
     
    Dim i As Integer
    



  • di stefanmi data: 11/09/2013 20:28:12

    anche oggi ne so piu' di ieri



  • di HarryBosch data: 11/09/2013 20:34:48

    @Totygno
    perché hai abbandonato la strada dell'unica istruzione? L'idea era buona :)
     
    Sub sposta_riga()
        Sheets(1).Rows(1).Copy Sheets(2).Rows("1:5")
    End Sub



  • di stefanmi data: 11/09/2013 20:48:34

    però con questa mi copia nella riga 1 del foglio 2, come faccioa farla cominciare dalla riga 2 foglio 2 come quella originale?
     
    Option Explicit
    
    Sub sposta_riga()
    Dim y As Long
      Worksheets("foglio1").Select
      For y = 1 To 5
        Rows("1:1").Select
        Selection.Copy
        Worksheets("foglio2").Select
        Rows(y).Select
        ActiveSheet.Paste
        'Exit For
      Next
    End Sub



  • di HarryBosch data: 11/09/2013 20:55:59

    Devi adattare l'intervallo:
    copio la riga 1 del foglio 1 --> Sheets(1).Rows(1).Copy
    nelle righe da 1 a 5 del foglio 2---> Sheets(2).Rows("1:5")
     
    Sub sposta_riga()
        Sheets(1).Rows(1).Copy Sheets(2).Rows("2:6")
    End Sub



  • di stefanmi data: 11/09/2013 21:08:39

    si harrybosh, questa l'ho capita ma vorrei riuscire a farlo con il ciclo for, solo per capire



  • di HarryBosch data: 11/09/2013 21:20:09

    Ok, non avevo capito che avevi capito :)

    Ti ho inserito i commenti: da notare che se la riga da copiare è sempre la stessa, la tieni fuori dal ciclo, perché basta memorizzarla una sola volta...
     
    Sub sposta_riga()
      Dim y As Integer
      'copio la riga 1 del foglio1
      Worksheets("foglio1").Rows(1).Copy
    
      'seleziono il foglio dove copiare
      Worksheets("foglio2").Select
    
      'per 5 volte
      For y = 1 To 5
        'seleziono la riga y del foglio2 che è già attivato in precedenza
        Rows(y).Select
        'copio la riga in memoria
        ActiveSheet.Paste
      Next
    
    End Sub



  • di stefanmi data: 11/09/2013 21:39:16

    quindi ho cambiato il valore 1 in 2 per cominciare dalla riga 2, giusto?
     
     For y = 1 To 5



  • di HarryBosch data: 11/09/2013 21:58:50

    Certo: il numero della riga (y) seguirà il valore della y ad ogni passaggio del ciclo. Se vuoi partire dalla seconda riga, imposti il ciclo a partire da 2 fino alla riga voluta:
    For y = 2 To 6



  • di totygno71 (utente non iscritto) data: 12/09/2013 08:40:31

    @Harry
    perché hai abbandonato la strada dell'unica istruzione? L'idea era buona :)

    risp: le donne lo odiano l'amico stefanmi invece lo vuole... il ciclo ^_^