Ciclo for 2



  • Ciclo for 2
    di trump61 data: 09/09/2015 17:32:30

    Ciao a tutti scusate il titolo ma non sapevo cosa scriverci. Con il codice sopra vado a trasferire i dati da un foglio con con colonne una di seguito alle altre in un foglio dove ogni colonna è invece a distanza di 3 colonne dall' altra,
    per essere più chiari il contenuto in colonna C del foglio lavoro va nella colonna C del foglio Maschera la colonna D del foglio Lavoro va nella colonna F del foglio maschera la E va in I la F va nella L e così via fino alla I che va nella U. Premetto che ogni colonna rappresenta un giorno della settimana. Adesso si è voluta inserire un altra colonna nel foglio maschera quindi l'intervallo non è più di tre colonne ma di 4, non sono riuscito a trovare con combinazioni matematiche un modo perchè ciò accada(quando abbiamo pensato di aggiungere l'altra colonna mi sono detto che ci vuole ed ho accettato di farlo, si come no ) L' unico modo che a me è venuto in mente è modificare questa parte (col - 2) * 3) inserendo (col - 2) * 3 + var ) che deve incrementare di uno ad ogni aumento del valore col cioè quando col è 3 var deve essere 1 quando col è 4 var deve essere 2 quando col è 5 var deve essere 3 e così via ho pensato di farlo con un ciclo for 1 To 7 , ma non funziona. In questo periodo devo dire che non sono proprio in forma mi sto impantanando spesso sarà che gli anni passano e il cervello non funziona più tanto bene , il mio ragionamento( lo so è un parolone) è attuabile? o c'è la possibilità di aumentare quella variabile in un altro modo.
    Grazie
     
    Sub Quattro4()
    Dim C As Range
    Dim col As Integer
    Dim rig As Long
    For col = 3 To 9
       For rig = 4 To 42
        Set C = Sheets("Lavoro").Cells(rig, col)
          If Mid(C.Text, 3, 1) <> "+" And Mid(C.Text, 3, 1) <> "/" Then
                Sheets("Maschera2").Cells(rig + 1, (col - 2) * 3) = Sheets("Lavoro").Cells(rig, col)
          Else
                Sheets("Maschera2").Cells(rig + 1, (col - 2) * 3) = Mid(Sheets("Lavoro").Cells(rig, col), 1, 1)
          End If
       Next
    Next
    Next L
    End Sub
    



  • di totygno71 data: 09/09/2015 18:04:33

    Non avendo il file sotto mano l'unica cosa che posso dirti è STUDIA IL CICLO FOR ^_^ scherzi a parte esegui il codice passo a passo con F8 e vedrai che capirai dove è l'errore, se ancora non ci riesci prova a postare il file.
    Toty






  • di trump61 data: 09/09/2015 18:07:25

    Scusatemi sono proprio rincoglionito, bastava cambiare col = 3 to 9 a col = 4 to 10,
    e

     
     Sheets("Maschera2").Cells(rig + 1, (col - 3) * 4) = Sheets("Lavoro").Cells(rig, col)
          Else
                Sheets("Maschera2").Cells(rig + 1, (col - 3) * 4) = Mid(Sheets("Lavoro").Cells(rig, col), 1, 1)



  • di totygno71 data: 09/09/2015 18:09:50

    Tranquillo
    Ciao
    PS Cerca di "evitare" certe parole per piacere la prossima volta!



  • di trump61 data: 09/09/2015 18:22:38

    Però adesso mi rimane il dubbio, diciamo che ipoteticamente mi serve di incrementare esempio:
    Sheets("Maschera2").Cells(rig + 1, (col - 3) * 4) = Sheets("Lavoro").Cells(rig, col)
    il 4 che ogni volta che il valore di col aumenta di uno anche 4 diventa 5 poi 6 poi 7 e così via, posso usare una variabile a posto del 4 e ciclarla?
    tipo :
    devo dire che questa è quasi la stessa situazione del post ciclo for, non mi era mai capitato di volerlo usare in questo modo e sinceramente(sono andato a leggermi qualcosa sui cicli for ma non ho trovato niente che parlasse di un caso simile a questo) per le mie conoscenze minime non vedo perchè non si possa fare ma ripeto le mie conoscenze minime ammetto la mia ignoranza non ho capito se si può fare,
    Ho provato a far girare il codice e il risultato non è come pensavo io.
    Se qualcuno può spiegarmi se sono proprio fuori strada o no
    Grazie ancora per la vostra pazienza, ma aiutate un povero illuso che pensa di coonoscere un po' di Vba

     
    Dim C As Range
    Dim col As Integer
    Dim rig As Long
    Dim lob As Integer
    For col = 4 To 10
       For rig = 4 To 42
         For lob = 1 to 7 
        Set C = Sheets("Lavoro").Cells(rig, col)
          If Mid(C.Text, 3, 1) <> "+" And Mid(C.Text, 3, 1) <> "/" Then
                Sheets("Maschera2").Cells(rig + 1, (col - 3) * 4 + lob) = Sheets("Lavoro").Cells(rig, col)
          Else
                Sheets("Maschera2").Cells(rig + 1, (col - 3) * 4 + lob) = Mid(Sheets("Lavoro").Cells(rig, col), 1, 1)
          End If
       Next
    Next
    Next
    
    End Sub
    



  • di totygno71 data: 09/09/2015 18:37:38

    cit"posso usare una variabile a posto del 4 e ciclarla?

    Che vuoi dire? Non capisco



  • di perché (utente non iscritto) data: 09/09/2015 18:58:35

    Purtroppo il problema non è capire come usare la for (che è comunque semplice se studiata cinque minuti seriamente, e non scherzo come totygno...), ma sapersi spiegare. Io non ho capito che cosa vuoi fare con quegli indici e quindi non saprei consigliarti ...

    Prova a scrivere una tabella con 5 o 6 righe delle operazioni che vuoi svolgere ripetutamente usando i numeri ... Esempio

    C(1, 1)=C(4, 1)
    ...



  • di trump61 data: 09/09/2015 19:52:53

    Scusate ho scritto male il codice (codice un parolone), vorrei sapere se si può
    (rig + 1, (col - 3) * lob) dove lob è una variabile che contiene un numero fornitogli da un ciclo che va da 1 a 7 ad esempio
    cioè l' espressione diventa se col = da 3 a 9 (rig + 1, (3 - 3) *1
    poi (rig + 1, (4 - 3) * 2
    poi (rig + 1, (5 - 3) * 3 e cosi fino a quando col arriva al valore 9 e lob al valore 7
    diciamo che la domanda dovrebbe essere questa "posso in un ciclo cambiare il valore di una variabile che è presente in esso con un altro ciclo?"
    io non ho capito bene cosa ho scritto, voi? ah ah ah ah ah, a parte gli scherzi spero di essermi spiegato,
    Cioè in questo caso mi servirebbe che il moltiplicatore cambiasse ad ogni cambiamento del valore di col, adesso mi son quasi capito
    grazie ancora
    PS se volete mandarmi in qualche posto lo posso capire
     
    Dim C As Range
    Dim col As Integer
    Dim rig As Long
    Dim lob As Integer
    For col = 4 To 10
       For rig = 4 To 42
         For lob = 1 to 7 
        Set C = Sheets("Lavoro").Cells(rig, col)
          If Mid(C.Text, 3, 1) <> "+" And Mid(C.Text, 3, 1) <> "/" Then
                Sheets("Maschera2").Cells(rig + 1, (col - 3) *  lob) = Sheets("Lavoro").Cells(rig, col)
          Else
                Sheets("Maschera2").Cells(rig + 1, (col - 3) *  lob) = Mid(Sheets("Lavoro").Cells(rig, col), 1, 1)
          End If
       Next
    Next
    Next
    
    End Sub



  • di perché-Bis (utente non iscritto) data: 09/09/2015 19:57:40




  • di perché-Bis (utente non iscritto) data: 09/09/2015 20:00:43

    C(1, 1)=C(4, 1) ???

    Forse dico chi sono "Almeno sono Registrato"



  • di perché (utente non iscritto) data: 09/09/2015 20:10:38

    No, purtroppo non ti ho capito ...

    Come ti ho detto, puoi elencare i valori che vuoi ottenere dal ciclo per rig e col ? Qualcosa come

    1, 4
    2, 8
    3, 12
    4, 16
    ...

    E' questa la sequenza che vuoi ottenere ? Oppure un'altra ?

    P.S. Non so chi sia questo Bis che posta copiando i miei post ... invito il moderatore ad intervenire ...



  • di perché-Bis (utente non iscritto) data: 09/09/2015 20:11:36

    Almeno nel NICK (fasullo), io la faccia la metto.
    Raffaele_53
    Hai il coraggio di farlo anche TU?, oppure sei un .........



  • di totygno71 data: 09/09/2015 20:12:48

    E diccelo dai... dopo questa perla di saggezza "C(1, 1)=C(4, 1) ???" siamo tutti desiderosi di conoscerti...



  • di perché (utente non iscritto) data: 09/09/2015 20:18:11

    @totygno
    Era un modo per abbreviare

    ... Cells(C(1, 1) = ... Cells(4, 1)

    Pensavo l'avessi capito ...

    P.S. Cosa ti interessa sapere chi sono? Sei tu il Bis? Comunque attendo l'intervento dei moderatori ... intanto non dovresti andare OT ...

    @trump
    Quello che serve per scrivere il ciclo (o i cicli) corretti è sapere come variano gli indici.
    Come ti dicevo prova a postare un elenco di valori che vuoi ottenere ...



  • di totygno71 data: 09/09/2015 20:23:21


    cit "Era un modo per abbreviare

    ... Cells(C(1, 1) = ... Cells(4, 1) "


    Bhauauauauauau sei unico!!!



  • di Raffaele_53 data: 09/09/2015 20:26:47

    >>>Sei tu il Bis? Comunque attendo l'intervento dei moderatori ...
    Sono Raffaele_53, ed hai moderatori non credo abbiano da dire (fosse si), pazienza cambio forum 



  • di perché (utente non iscritto) data: 09/09/2015 20:28:13

    Problema di copia incolla (e non si può modificare il post) ...

    ... Cells(1, 1) = ... Cells(4, 1)

    Ma con un po' di "apertura mentale" ci potervi arrivare da solo ...

    Ma perché stai a discutere con me andando OT invece di rispondere a trump?



  • di perché (utente non iscritto) data: 09/09/2015 20:30:45

    @raffaele_53
    Si può sapere tu cosa c'entri nella discussione ? (A parte l'itagliano sconnesso ...)

    Ma un moderatore può intervenire riportando la discussione in-topic?



  • di totygno71 data: 09/09/2015 20:40:08

    @Raffaele....
    hai il permesso di "perchè" per intervenire nella discussione???
    Nooo??? Allora ritieniti in punizione...
    bhauahahahah



  • di Raffaele_53 data: 09/09/2015 20:40:41

    @perché
    A parte l'italiano sconnesso, credo di essere meglio in matematica (sconnessa) di Te.
    ED...Moderatore...,Moderatore...,Moderatore... (AIUTO)



  • di trump61 data: 09/09/2015 20:43:50

    Scusate spero che non sia per me che vi state bisticciando.
    In pratica si quella è la sequenza che vorrei ottenere



  • di Raffaele_53 data: 09/09/2015 20:47:26

    Mon c'entri nulla TU, il "perchè" deve dirci perchè rompe le palle???



  • di totygno71 data: 09/09/2015 20:49:40

    @trump61
    No tranquillo stiamo scherzando...
    se è questa la sequenza
    A, B
    1, 4
    2, 8
    3, 12
    4, 16

    puoi usaer il ciclo:


     
    for A =  1 to 4
         
         for B = 4 to 16 step 4
               
                'codice che voui tu
    
         next B
    
    next A
    



  • di Mauro data: 09/09/2015 20:53:58

    Ragazzi calma, o sono costretto a prendere provvedimenti seri! Forse l'utente non iscritto "perché" ci vuole dire qualcosa? Ha un'idea diversa di come condurre un forum? Possiamo anche parlarne in privato. Puoi usare il modulo contatti.



  • di Raffaele_53 data: 09/09/2015 21:00:29

    Perche non si registra?
    Se è bravo, io accetto, a parte dire.
    Fammi vedere un'esempio ...Cells(C(1, 1)
    Dove C stà per Cells (ok sono fesso e non capisco nulla)



  • di Mauro data: 09/09/2015 21:12:03

    Raffaele calma vedrai che risolviamo.



  • di perché (utente non iscritto) data: 09/09/2015 21:12:18

    Scusa Mauro, ma perché chiedi a me che sto rispondendo IN-TOPIC e non sanzioni chi sta "trollando" ?

    Ti faccio notare che la soluzione dei for parte dalla precisazione della tabella che ho chiesto a trump e che gli altri "signori" tutto hanno fatto tranne che rispondere al problema.

    E tu chiedi spiegazioni a me?



  • di Mauro data: 09/09/2015 21:16:47

    Ti sto chiedendo una chiaccherata in privato, sei un nuovo utente interessato a rispondere alle discussioni, mi piacerebbe capire chi sei e come la pensi! Tranquillo non ti tiro le orecchie!



  • di totygno71 data: 09/09/2015 21:18:36

    cit "Ti faccio notare che la soluzione dei for parte dalla precisazione della tabella che ho chiesto a trump

    Grazie del tuo prezioso contributo "perchè"!!!!



  • di perché (utente non iscritto) data: 09/09/2015 21:21:36

    Sono interessato a rispondere e ho risposto. Non ho interesse a fare chiaccherate ed è da un po' di tempo che qualcuno non mi "tira le orecchie", figurati ...

    Speravo in un tuo intervento da "amministratore" del forum, basta rileggere questo thread, ma evidentemente rimarrò deluso.

    A questo punto mi piacerebbe solo sapere se trump ha risolto, in caso contrario può chiedere chiarimenti e sarò lieto di ritornare a rispondergli.



  • di totygno71 data: 09/09/2015 21:28:30

    cit"A questo punto mi piacerebbe solo sapere se trump ha risolto, in caso contrario può chiedere chiarimenti e sarò lieto di ritornare a rispondergli.

    BRAVO questo è lo spirito del Forum...
    Chissà magari presto sarai nel team degli esperti!!!^_^



  • di perché (utente non iscritto) data: 09/09/2015 21:32:22

    @totygno
    Guarda che il giusto "spirito del forum" so qual è ... forse è chi scrive che "rompo le palle" e chi "non sanziona" queste frasi è quello che non lo conosce ... ma me ne farò una ragione ...




  • di totygno71 data: 09/09/2015 21:36:27

    cit"forse è chi scrive che "rompo le palle" e chi "non sanziona" queste frasi è quello che non lo conosce ...

    Bhe... Allora Mauro... mi dispiace dirtelo.... Ma sei LICENZIATO!!!



  • di Mauro data: 09/09/2015 21:54:34

    Ok forum blindati! Buona notte a tutti.



  • di trump61 data: 10/09/2015 02:30:53

    Scusa mi sono distratto e ho sbagliato, non riesco a spiegarmi,
    se uno avesse bisogno .
    diciamo che scritto cosi otterrei quello che mi serve, ma ho dovuto scrivere molte righe di codice,
    vorrei scrivere un codice di una sola riga visto che il moltiplicatore incrementa di uno ogni volta. Qui avevo pensato di inserire una nuova variabile al quale assegno il valore con un ciclo ad esempio da 2 a 4 come sopra, io credevo che si potesse fare ma il risultato non è stato quello voluto. Spero di essere stato il piu' possibilmente chiaro
    Ciao e grazie


     
    Dim col As Integer
    Dim rig As Long
    For col = 4 To 10
       For rig = 4 To 7
    
     (rig + 1, (col - 3) * 2 )
     (rig + 1, (col - 3) * 3 ) qui ho scritto solo la parte incriminata
     (rig + 1, (col - 3) * 4 )
    



  • di Raffaele_53 data: 10/09/2015 07:12:00

    @trump61
    >>>(rig + 1, (col - 3) * 3 ) qui ho scritto solo la parte incriminata

    Non ho capito il Tuo problema, comunque vedo alcune magagne.
    Oltre al fatto che Integer (se fosse un numero, meglio long) e davanti al codice manca il cells o Range ex cells(rig + 1, (col - 3))
    Non capisco perchè moltiplichi le colonne (col - 3) * 3

    Puoi fare un riassunto di cosa desideri con spiegazioni adeguate (vedo di risponderTi)



  • di totygno71 data: 10/09/2015 08:33:38

    Cancellato!
    Chiedo Scusa!



  • di totygno71 data: 10/09/2015 08:35:52

    cit"Bhe... Allora Mauro... mi dispiace dirtelo.... Ma sei LICENZIATO!!!

    Chiedo pubblicamente SCUSA all'Amministratore per la battuta infelice fatta!



  • di cromagno data: 10/09/2015 09:20:57

    Buongiorno a tutti,
    @trump61
    credo di aver capito il tuo problema (sottolineo credo...), certo che sarebbe meglio se allegassi un file che abbia la struttura attuale (quindi 4 colonne di distanza) per capire in che modo poter definire una variabile che si "adegui" all'inserimento di future colonne (4,5,6, etc...).

    Se non sbaglio hai detto all'inizio che ogni colonna rappresenta un giorno della settimana... quindi, questa variabile (che hai chiamato "lob") potrebbe verificare in che colonna si trova ad esempio "Lunedì" e prendere quel valore come dato base.
    Non so se mi son spiegato bene
    Comunque, ti ripeto, con il file sottomano sarebbe più semplice.

    Rimaniamo in attesa, ciao



  • di trump61 data: 10/09/2015 16:09:16

    Non c'è nessun file, questo dubbio mi è venuto mentre risolvevo il vero problema. Purtroppo come mi capita spesso ultimamente mi sono ingarbugliato a trovare una soluzione che poi in realtà era molto più semplice di quello che pensavo. Però mi è venuto un dubbio, già in un post precedente provando ad unire due diversi cicli il risultato non era quello desiderato e mi è stato fatto notare che stavo interpretando male l'uso del ciclo for.
    Dopo suggerimenti ho potuto risolvere usando un solo ciclo, sfruttando la matematica. aggiungendo o togliendo valori alle variabili in gioco es variabile "col" l'ho usata (rig, col + 2) ma se io avessi bisogno che il valore 2 aumentasse di 1 ogni volta che nel ciclo rig e col variano es (2, 3 +2 ) poi (3, 4 + 3) poi (4, 5 + 4), in questo caso che è semplice potrei mettere "rig" al posto del valore numerico perchè coincidono cioè (rig, col + rig) ma se i valori non coincidessero potrei usare una altra variabile ciclata esempio (rig, + col + lob) dove lob per esempio For lob = 5 to 9, voi mi direte prova a scrivere un codice e appura se è realizzabile, l' ho fatto ma i risultati non sono stati quelli sperati, però secondo me il ragionamento fila o sto sbagliando di grosso?
    Grazie se non mi sono spiegato neanche questa volta facciamo che non abbia mai incominciato questa discussione perchè a me meglio di così non mi riesce di spiegare cosa vorrei sapere. Oppure sto scrivendo una bestialità enorme.
    AH AH AH AH AH AH



  • di trump61 data: 10/09/2015 16:38:41

    Scusate sto cadendo in depressione, ora anche questo codice non fa quello che dico io,
    Da un foglio dove nelle colonne da 3 a 9 nella riga 2 ci sono delle date, le devo copiare in un altro foglio dove le ho unito 4 celle es C2:F2 , quindi sono 9 blocchi da 4 e in ogni blocco devo andarci a copiare la data presente nel primo foglio , il codice scrive nel fogio Maschera2 nel posto giusto la data, soltanto che copia in tutte le aree l'ultima data del foglio lavoro, chiedo scusa ma non capisco perchè, Sheets("Lavoro").Cells(2, bol), questo dovrebbe copiarmi da riga 2 colonna 3 a riga 2 colonna 9 almeno questo mi dicono le ormai pochissime nozioni acquisite, sto in confusione totale. Forse dipende dal fatto che devo farlo per forza e in questi giorni non mi va'

     
    Sub Nero()
    Dim bol As Integer
    Dim col As Integer
    For bol = 3 To 9
    For col = 3 To 30 Step 4
     Sheets("Maschera2").Range(Cells(2, col), Cells(2, col + 3)) = Sheets("Lavoro").Cells(2, bol)
    Next
    Next
    End Sub



  • di Raffaele_53 data: 10/09/2015 16:53:27

    Meno male che ho detto>>>long
    Scusa la parola "Ci sei?".
    >>>quindi sono 9 blocchi da 4 e in ogni blocco???
    Mi fai una cortesia, spiegalo a parole



  • di Marius44 data: 10/09/2015 17:25:45

    Ciao trump61
    Ma perchè complicarsi la vita. Prima di postare un codice bisogna ragionarci sopra. Prova la sub sotto e dimmi come va.

    Ciao,
    Mario
     
    Sub Nero()
    Dim bol As Long, col As Long
        col = 3
        For bol = 3 To 9
            Sheets(2).Cells(2, col) = Sheets(1).Cells(2, bol)
            col = col + 4
        Next
    End Sub



  • di trump61 data: 10/09/2015 18:07:02

    Siete gentilissimi, ho allegato il file questa è solo un minima parte, prima dal foglio lavoro copiavo i dati nel foglio Turni13News con dei codici tutto andava benissimo poi quacuno ha voluto inserire una quarta colonna che sarebbe la prima di ogni giorno della settimana, ho cambiato i codici e funziona tutto tranne quello che devo copiare la data, per motivi di presentazione finale ho unito le colonne con" Unisci Cella" e qui mi sono un po perso, con il codice nero faccio copiare nel posto giusto del foglio Maschera2 le date soltanto che mi copia in tutte le colonne l'ultima data cioè quella della domenica cosa che secondo me non dovrebbe succedere, ma in questo periodo è meglio se lascio da parte le mie convinzioni visto che sto prendendo parecchie cantonate.
    Per Mario grazie per il tuo codice ma funziona a Metà chiamiamola colonna in realtà sono una serie di celle, dunque nella prima colonna Mi scrive la data del 20/9 che è l'ultima poi scrive bene per tre giorni ne salta uno e scri gli ultimi due correttamente



  • di Marius44 data: 10/09/2015 19:33:30

    Non deve saltare nulla.
    Se guardi il codice non fa altro che assumere la data che c'è in riga 2 dalla colonna 3 alla 9 comprese in Foglio1 e le incolla sempre in riga 2 dalla colonna 3, aggiunge 4 colonne e riscrive la data in Foglio2.
    In un post precedente hai detto che hai "unito" quattro celle, quindi dalla 3 alla 6, e poi altre 4 e così via. Il codice di questo tiene conto.
    Prova e fammi sapere. Ciao,
    Mario



  • di trump61 data: 10/09/2015 19:41:52

    Scusate ho rimesso i file perche' credo di aver messo qualcos'altro



  • di trump61 data: 10/09/2015 19:43:20

    Hai perfettamente ragione per questo non ci sto capendo niente



  • di trump61 data: 11/09/2015 10:27:13

    Scusate non so cosa sia cambiato da ieri a stamattina sicuramente io sono meno confuso il codice di Marius44 funziona. Forse a volte quando ti incaponisci devi staccare.
    Grazie a tutti