FOR ITO base



  • FOR I..TO (base)
    di Ivan (utente non iscritto) data: 01/06/2017 21:00:33

    Ciao a tutti.

    Esempio banalissimo, voglio capire il meccanismo alla base del for-to.

    Esempio:
    Colonna 1 = "totale"
    Colonna 2,3,4 = "addendi"
    Colonna 5 = "risultato

    Vorrei che se la somma degli addendi sia uguale ad il numero contenuto in colonna 1 in colonna 5 compaia scritto "ok".

    Mi compare "errore di compilazione next senza for."
     
    Sub prova()
    
    Sheets("foglio 1").Activate
    
    Dim i, j As Integer
    
    For i = 1 To 4
    
    For j = 2 To 3
    
    If Cells(1, i).Value = (Cells(2, j).Value + Cells(3, j).Value + Cells(4, j).Value) Then
    
    Cells(5, i).Value = "ok"
    
    Next j
    Next i
    
    End Sub



  • di Mister_x (utente non iscritto) data: 01/06/2017 23:01:08

    ciao

    in questo caso non servono 2 cicli for, a dire il vero neanche 1
    comunque ti posto questo da valutare come specificato nei tuoi dati
    Esempio:
    Colonna 1 = "totale"
    Colonna 2,3,4 = "addendi"
    Colonna 5 = "risultato
    si deduce che questi sia svolto su una sola riga


    ciao
     
    Sub controllo()
    Dim i As Long  '' numero intero
    Dim tot234 As Double '' il calcolo bisogna farlo su una variabile double per i decimali xxxx
    For i = 2 To 4 ''viene dato un valore a i in questo caso riferito a colonna
    tot234 = tot234 + Cells(1, i) 'incremento della variabile di conteggio
    Next i
    If tot234 = Cells(1, 1) Then Cells(1, 5) = "OK" ''confronto tra calcolo e la prima cella
    End Sub
    ''impostazione di Cells()  cells(row,column) cells(riga,colonna)






  • di Vecchio Frac data: 02/06/2017 12:37:34

    cit. "voglio capire il meccanismo alla base del for-to. "
    ---> Tecnicamente non è corretto riferirsi al costrutto chiamandolo "for-to". Il costrutto corretto è "For-Next". Serve a costruire un ciclo all'interno di un insieme, cioè a ripetere una determinata serie di istruzioni per un certo numero di volte. E' costituito da una variabile di controllo, detta contatore, incrementata dal compilatore ad ogni passaggio. Il passaggio è segnato dall'istruzione che dice di proseguire: Next. La parola chiave To serve a definire il range di valori in cui ciclare. Quindi
    For i = 1 to 10 'ripeti per dieci volte quello che c'è tra For e Next
    ... istruzioni ...
    Next

    L'errore del tuo esempio ("Next senza For") è fasullo, non è riferito all'assenza del Next, perchè tu hai correttamente chiuso i due cicli i e j; il problema è che hai aperto un If...Then la cui conclusione non sta sulla stessa riga dell'If (quindi il compilatore presume che tu abbia iniziato un controllo multiriga). La soluzione è un "End If" dopo Cells(5, i).Value = "ok".

    ps non entro nel merito del codice proposto





  • di Ivan (utente non iscritto) data: 02/06/2017 20:07:43

    Grazie.

    @Vecchio Frac

    Purtroppo non ho risolto.

    L'errore ora è:
    "Indice non incluso nell'intervallo".
    Run-time 9

    Ho cercato in rete ma non capisco...
     
    Sub prova()
    
    Sheets("foglio 1").Activate
    
    Dim i, j As Integer
    
    For i = 1 To 4
    
    For j = 2 To 3
    
    If Cells(1, i).Value = (Cells(2, j).Value + Cells(3, j).Value + Cells(4, j).Value) Then
    
    Cells(5, i).Value = "ok"
    
    End If
    
    Next j
    Next i
    
    End Sub



  • di Vecchio Frac data: 02/06/2017 22:45:00

    Sarebbe più utile indicare anche dove si genera l'errore (nla riga gialla evidenziata dal compilatore è quella che genera l'errore).
    Nel tuo caso, molto probabilmente, l'errore si genera qui:
    Sheets("foglio 1").Activate

    perchè, sempre molto probabilmente, il foglio si chiama "Foglio1" e non "Foglio 1" (gli spazi sono importanti).





  • di Ivan (utente non iscritto) data: 03/06/2017 01:10:19

    Ciao Mister x
    se invece, come nell'allegato che avevo messo, le righe popolate e sulle quali fare i controlli fossero più di una?
    Come estendersi l'esercizio verticalmente ad altre righe?
    Grazie



  • di Mister_x (utente non iscritto) data: 05/06/2017 09:38:52

    ciao

    la sub() in questione viene modificata , in base al tuo file postato in questo modo
    PD ho dichiarato la variabile Rig Per righe, e Col per colonne per farti capire quale e' la riga e quale la colonna
    per l'errore ho visto che Vecchio Frac ti a gia detto il problema , io ho impostato questi esatto in base al tuo file

    ciao

     
    Sub controllo()
    Dim Rig As Long, Col As Long '' numero intero
    Dim tot234 As Double '' il calcolo bisogna farlo su una variabile double per i decimali xxxx
    Sheets("Foglio1").Select
    For Rig = 2 To 5 ''viene dato un valore a i in questo caso riferito a colonna
     tot234 = 0 ''riporta la variabile a valore 0
    For Col = 2 To 4
      tot234 = tot234 + Cells(Rig, Col) 'incremento della variabile di conteggio
    Next Col
      If tot234 = Cells(Rig, 1) Then
          Cells(Rig, 5) = "OK" ''confronto tra calcolo e la prima cella
      Else
          Cells(Rig, 5) = "NO"
      End If
    Next Rig
    End Sub
    ''impostazione di Cells()  cells(row,column) cells(riga,colonna)
    






  • di Mister_x (utente non iscritto) data: 05/06/2017 11:25:01

    riciao

    ho lasciato nelle note dei valori errati , ripropongo la sub() corretta nelle note di riga
    ciao
     
    Option Explicit
    Sub controllo()
    Dim Rig As Long, Col As Long '' numero intero
    Dim tot234 As Double '' il calcolo bisogna farlo su una variabile double per i decimali xxxx
    Sheets("Foglio1").Select ''seleziona il foglio da valutare
    For Rig = 2 To 5 ''viene dato un valore a Rig in questo caso riferito alla Riga da analizzare
     tot234 = 0 ''riporta la variabile a valore 0
    For Col = 2 To 4  '' colonna da analizzare
      tot234 = tot234 + Cells(Rig, Col) 'incremento della variabile di conteggio
    Next Col
      If tot234 = Cells(Rig, 1) Then ''confronta cella di colonna A:A
          Cells(Rig, 5) = "OK" ''confronto tra calcolo e la prima cella = vero
      Else
          Cells(Rig, 5) = "NO" ''  non conforme
      End If
    Next Rig
    End Sub
    ''impostazione di Cells()  cells(row,column) cells(riga,colonna)
    






  • di totygno71 data: 15/06/2017 21:23:10

    Buonasera a tutti tranne che a Uno! ^_^

    @ Ivan

    If.... then
    ......
    else
    .....
    END IF



     
    Sub prova()
    
    Sheets("foglio 1").Activate
    
    Dim i, j As Integer
    
    For i = 1 To 4
    
    For j = 2 To 3
    
    If Cells(1, i).Value = (Cells(2, j).Value + Cells(3, j).Value + Cells(4, j).Value) Then
    
    Cells(5, i).Value = "ok"
    
    Next j
    Next i
    
    End Sub



  • di Vecchio Frac data: 16/06/2017 08:40:37

    cit. Buonasera a tutti tranne che a Uno!

    @Totyyyyyyyyyyyyyyyyyyyyy