Condividi:        

come funziona lo step in ciclo

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

come funziona lo step in ciclo

Postdi giorgioa » 23/11/23 19:47

Salve,

cortesemente un aiuto per far funzionare lo step e relativo funzionamento della macro

Codice: Seleziona tutto
Dim sh1 As Worksheet
Dim i As Long, j As Long
Dim k As Integer, L As Integer, m As Integer, n As Integer, jj As Integer
Set sh1 = Sheets("Sum90")
Sheets("Sum90").Activate
Application.Calculation = xlCalculationManual
i = sh1.Cells(Rows.Count, 4).End(xlUp).Row - 3
jj = 90

For i = 1 To 2 Step 7
For j = 1 To 5
Cells(4 + i, 3 + j).Value = (jj - Cells(3 + i, 3 + j).Value + Cells(3 + i, "d").Value) Mod 90
Next j
For k = 1 To 5
Cells(5 + i, 3 + k).Value = (jj - Cells(3 + i, 3 + k).Value + Cells(3 + i, "e").Value) Mod 90
Next k
For L = 1 To 5
Cells(6 + i, 3 + L).Value = (jj - Cells(3 + i, 3 + L).Value + Cells(3 + i, "f").Value) Mod 90
Next L
For m = 1 To 5
Cells(7 + i, 3 + m).Value = (jj - Cells(3 + i, 3 + m).Value + Cells(3 + i, "g").Value) Mod 90
Next m
For n = 1 To 5
Cells(8 + i, 3 + n).Value = (jj - Cells(3 + i, 3 + n).Value + Cells(3 + i, "h").Value) Mod 90
Next n
ActiveCell.Offset(7, 0).Range("a1").Select

Next i

Attenzione oltre lo step come indicato con offset la macro deve continuare a calcolare
la successiva riga
Forse qualche chiarimento?

Grazie per e dell'aiuto
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Sponsor
 

Re: come funziona lo step in ciclo

Postdi Anthony47 » 24/11/23 15:42

In un ciclo For / Next le istruzioni contenute all'interno del ciclo sono ripetute fintanto che il "contatore", partendo da un valore iniziale non arriva al valore finale, salvo che non sia interrotto precedentemente es da una istruzione Exit For oppure un meno ortodosso GoTo; valore iniziale e valore finale sono definite nell'istruzione For.
Il contatore incrementa di +1 ad ogni ciclo, salvo che non sia dichiarato un altro valore con l'opzione Step

Per esempio
Codice: Seleziona tutto
For I = 2 To 10
    Istruzione1
    Istruzione2
Next I
Istruzione1 e Istruzione2 saranno eseguite 9 volte, con i valori di I da 2 a 10 (inclusi)

Codice: Seleziona tutto
For I = 2 To 10 Step 5
    Istruzione1
    Istruzione2
Next I
Le istruzioni saranno eseguite 2 volte una con I=2 e l'altra con I=7

Step puo' essere anche un numero negativo, tipo
Codice: Seleziona tutto
For I = 10 To 2 Step -1
    Istruzione1
    Istruzione2
Next I
Le istruzioni saranno ripetute 9 volte, con I=10, 9, 8 ... 2

Per la descrizione del ciclo For...Next, vedi https://learn.microsoft.com/it-it/offic ... -statement

Per far funzionare la tua macro dovresti descrivere che cosa vorresti che facesse
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 24/11/23 17:41

Salve Anthony,

so che sono piuttosto abusivo per le continue richieste.
Prima di fare richieste cerco altrove per trovare ciò che mi serve.
Purtroppo le mie sono richieste mirate e difficilmente trovo accomodamento.

cosa vorrei facesse la macro
quelle righe calcolano quanto vorrei in quelle righe
solo che vorrei passare a 7 righe sotto prendendo in considerazione
dati 7 righe più in giù.

spero ti sia più chiaro il mio step anzi "ActiveCell.Offset(7, 0).Range("a1").Select"

pensavo che l'incremento della variabile i si adeguasse alla riga in cui si sposta
e continuare coi dati della 7ima riga successiva a calcolare
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 25/11/23 00:22

giorgioa ha scritto:so che sono piuttosto abusivo per le continue richieste.
Per questo non ti preoccupare, metto tutto in un unico conto finale :D

giorgioa ha scritto:quelle righe calcolano quanto vorrei in quelle righe
solo che vorrei passare a 7 righe sotto prendendo in considerazione
dati 7 righe più in giù
Questo "chiarimento" e' un po' criptico
Facciamo così
-spiega come sono fatti i tuoi dati di foglio Sum90 (dovrebbe bastare una immagine)
-partendo da questi dati spiega che analisi vanno fatte per il calcolo dei risultati (tieni presente che solo tu sai che cosa cerchi di fare)
-segna alcune righe dei risultati che quei dati dovrebbero produrre secondo quelle analisi

Da parte mia prometto una macro molto didattica con esagerazione di commenti (a crederci :D )

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 25/11/23 16:24

Immagine
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi giorgioa » 25/11/23 16:38

Salve Anthony,

ho postato l'immagine
da rigo 4 il calcolo passa a rigo 16
se alla variabile i = 3 dopo aver calcolato il rigo 4
continua a rigo 5,
Invece deve saltare a rigo 16 (12 righe)e cioè 28 poi rigo 40 ecc
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi giorgioa » 26/11/23 12:09

Salve Anthony,
in vista della tua disponibilità, vorrei capire se l'immagine che ho postato ti risulta visibile.
Ad major
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 26/11/23 22:44

Ho editato il tuo messaggio per rendere l'immagine visibile piu' facilmente

Sulla base di quanto hai detto e dell'immagine pubblicata, con certezza posso solo dire che il ciclo principale va ragionevolmente impostato come segue:
Codice: Seleziona tutto
Dim Last As Long, I As Long
Last = sh1.Cells(Rows.Count, 3).End(xlUp).Row       'Calcola ultima riga compilata in col C
jj = 90
'
For I = 4 To Last Step 12                           'Imposta contatore di righe a passo 12
'..
'..
'..
Next I                                              'Ripeti il ciclo

Le istruzioni all'interno del loop per me sono illegibili, perche' nè hai detto quali regole vanno utilizzate per calcolare i risultati nè hai scritto quali risultati tali regole avrebbero dovuto produrre.

Avendo tirato a indovinare più volte su cosa avrebbero potuto ipoteticamente significare alcune strane combinazioni, scommetto 1 soldo bucato su questo codice complessivo:
Codice: Seleziona tutto
Sub MiaMacro()
'Dim sh1 As Worksheet               'inutile
Dim I As Long, j As Long
Dim k As Integer, jj As Integer
'Set sh1 = Sheets("Sum90")          'inutile
Sheets("Sum90").Activate
Application.Calculation = xlCalculationManual
Dim Last As Long
'
Last = Cells(Rows.Count, 3).End(xlUp).Row           'Calcola ultima riga compilata in col C
jj = 90
For I = 4 To Last Step 12                           'Imposta contatore di righe, a passo 12
    For j = 1 To 5                                  'Imposta questo contatore a 5 cicli, per puntare a E-F-G-H-I
        For k = 1 To 5                              'Imposta questo contatore a 5 righe di risultato
            Cells(I + j, 4 + k).Value = (jj - Cells(I, 4 + k) + Cells(I, 4 + j)) Mod 90
        Next k
    Next j
Next I
Application.Calculation = xlCalculationAutomatic    'Calcolo automatico
Calculate                                           'Esegui RiCalcolo
End Sub


Utilizzando tale macro, partendo dai dati in giallo ho calcolato i seguenti dati in arancione:
Immagine
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 27/11/23 16:31

https://we.tl/t-wGAgXFsuJq

Salve,
per funzionare funziona cioè la variabile Last l'ho creata nella mia macro e quindi funziona

Ma volevo che funzionasse la correzione che mi hai apportato poiche di frequente imposto
quel tipo di macro solo che a modo mio mi tocca aggiungere righe di codici.

La tua non funzionava in quanto mancava il valore da aggiungere
((90-e4)+ dc5) mod 90
questo semplice calcolo mi evita di aggiungere diversi "se" cioè
la tua macro non sono riuscito a completarla cioè calcola solo il primo rigo dei 5
cosa fa la macro:
in E5 scrive il primo risultato che ottiene togliendo a 90 il primo numero di E4l poi aggiunge il primo
di colonna D5 che per questa riga è fisso poi alla seconda riga conta sempre 90 - E4 ma aggiunge D6
da tenere presente che se col + di colonna D supera 90 da quel numero sottrae 90.
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 27/11/23 17:01

Se cambi le carte in tavola a ogni messaggio non arriviamo da nessuna parte (la colonna D nel tuo primo screenshot era vuota, ora e' diventata una colonna da prendere in considerazione per i calcoli).
Facciamo così:
-pubblichi uno screenshot di come sono i dati di partenza; per le istruzioni su come allegare una immagine:
http://www.pc-facile.com/forum/viewtopi ... 88#p605488
-sullo stesso screenshot evidenzi in giallo i dati di partenza e in arancione l'area per i dati da creare
-descrivi quali calcoli vanno fatti per produrre i risultati
-descrivi quali adattamenti devi fare necessariamente in proprio e cechero' di tenerne conto
Ignora tutto il codice pubblicato finora
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 28/11/23 07:36

https://we.tl/t-OUKy9sKPhq



riporto il calcolo e a fianco la macro funzionante

vorrei, per favore, mi trasformi la mia macro a modo tuo
cosa fa.
cella E5 = (90 - cella E4 + D5) mod 90
cella F5 = (90 - cella F4 + D5) mod 90
cella G5 = (90 - cella G4 + D5) mod 90
e fino ad I
seconda riga
cella E6 = (90 - cella E4 + D6) mod 90
cella F6 = (90 - cella F4 + D6) mod 90 eccetera
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 28/11/23 16:43

Se nella tua ultima formulazione le celle D5:D9 hanno gli stessi valori che E4:I4 (come si evince dal tuo ultimo screenshot) allora la macro che ti diedi il 26-11 sera gia' fa i calcoli come hai descritto nel messaggio di stamattina
Se non ti torna spiega che cosa non ti torna; es
-in E5 mi aspettavo "questo" perchè "questi motivi" e invece trovo "quest'altro"

Se invece vuoi avere la liberta' di impostare D5:D9 indipendentemente da E4:I4 allora usa questa variante:
Codice: Seleziona tutto
Sub DifferAnth()
'Dim sh1 As Worksheet               'inutile
Dim I As Long, j As Long
Dim k As Integer, jj As Integer
'Set sh1 = Sheets("Sum90")          'inutile
Sheets("Sum90").Activate
Application.Calculation = xlCalculationManual
Dim Last As Long
'
Last = Cells(Rows.Count, 3).End(xlUp).Row           'Calcola ultima riga compilata in col C
jj = 90
For I = 4 To Last Step 12                           'Imposta contatore di righe, a passo 12
    For j = 1 To 5                                  'Imposta questo contatore a 5 cicli, per puntare a D5-D6-D7-D8-D9
        For k = 1 To 5                              'Imposta questo contatore a 5 righe di risultato
            Cells(I + j, 4 + k).Value = (jj - Cells(I, 4 + k) + Cells(I + j, "D")) Mod 90
        Next k
    Next j
Next I
Application.Calculation = xlCalculationAutomatic
Calculate
End Sub

Anche qui, se qualcosa non ti quadra dettaglia l'errore
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 28/11/23 18:36

OK, nulla da eccepire sui dati della macro cioè che sono quelli voluti

Ho fatto una aggiunta nella macro che mi elimina le celle con ZERO

Codice: Seleziona tutto
Dim I As Long, j As Long
Dim k As Integer, jj As Integer
Sheets("Sum90").Activate
Application.Calculation = xlCalculationManual
Dim Last As Long
'
Last = Cells(Rows.Count, 3).End(xlUp).Row           'Calcola ultima riga compilata in col C
jj = 90
For I = 4 To Last Step 12                           'Imposta contatore di righe, a passo 12
    For j = 1 To 5                                  'Imposta questo contatore a 5 cicli, per puntare a D5-D6-D7-D8-D9
        For k = 1 To 5                              'Imposta questo contatore a 5 righe di risultato
            Cells(I + j, 4 + k).Value = (jj - Cells(I, 4 + k) + Cells(I + j, "D")) Mod 90
            If Cells(I + j, 4 + k).Value = 0 Then Cells(I + j, 4 + k).Value = ""      'elimina cella con Zero
        Next k
    Next j
Next I
Application.Calculation = xlCalculationAutomatic
Calculate
End Sub

tenuto conto che Cells(I+j, 4+k).value non è altro che l'intervallo del quadrato
si potrebbe, da elencare in colonna J a fianco il quadrato, riportare il numero del duplicato
se sono presenti?
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 28/11/23 21:24

In quei calcoli ci saranno dei duplicati se nella riga di partenza (4-16-etc) ci sono duplicati; e' realmente possibile? E come risultato che cosa vorresti: (a) contare per ogni riga quante coppie di risultati sono presenti, o (b) quali numeri sono presenti in coppia, o (c) ....
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 28/11/23 21:52

https://we.tl/t-4uVObXhQfv

la colonna D esterna e la riga 352 esterna anche questa
non rientrano in numeri duplicati
Da elencare dal rigo J353 senza rispettare la riga di uscita del numero
cioè il primo che trova nell'area cella j353, il secondo j354 anche se si trovano
alla quinta riga
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 29/11/23 11:57

Quando si imposta una macro bisognerebbe conoscere tutte le cose che deve fare, se aggiunte successivamente comportano il doppio di lavoro...
Per segnalare doppioni, viene modificata la Sub DifferAnth ('azzeramento dell'area destinata ai risultati (colonne E:J) e la modifica delle istruzioni che scrivono il risultato) e aggiunta la nuova Sub CkDoppio.
Il codice complessivo:
Codice: Seleziona tutto
Sub DifferAnth()
Dim I As Long, J As Long
Dim k As Integer, jj As Integer
'
Sheets("Sum90").Activate
Application.Calculation = xlCalculationManual
Dim Last As Long
'
Last = Cells(Rows.Count, 3).End(xlUp).Row           'Calcola ultima riga compilata in col C
jj = 90
For I = 4 To Last Step 12                           'Imposta contatore di righe, a passo 12
    Cells(I + 1, 5).Resize(5, 6).ClearContents      'Pulisce l'area dei risultati
    For J = 1 To 5                                  'Imposta questo contatore a 5 cicli, per puntare a D5-D6-D7-D8-D9
        For k = 1 To 5                              'Imposta questo contatore a 5 righe di risultato
            Cells(I + J, 4 + k).Value = (jj - Cells(I, 4 + k) + Cells(I + J, "D")) Mod 90
            If Cells(I + J, 4 + k).Value <> 0 Then
                Call CkDoppio(I, J, Cells(I + J, 4 + k).Value)
            Else
                Cells(I + J, 4 + k).ClearContents
            End If
        Next k
    Next J
Next I
Application.Calculation = xlCalculationAutomatic
Calculate
End Sub


Sub CkDoppio(ByVal R As Long, R2 As Long, ccNum As Long)
'
    If Application.WorksheetFunction.CountIf(Cells(R + 1, "E").Resize(5, 5), ccNum) > 1 Then
        If Cells(R + R2, 10) = "" Then
            Cells(R + R2, 10) = ccNum
        Else
            Cells(R + R2, 10) = Cells(R + R2, 10) & " - " & ccNum
        End If
    End If
End Sub

Eventuali doppioni vengono scritti in colonna J, sulla riga in cui il doppione si manifesta; se sulla stessa riga ci fossero piu' doppioni essi verranno ambedue scritti in colonna J separati da "-"

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 29/11/23 15:08

Salve

https://we.tl/t-nivptEDDJt

e se il secondo, terzo numero lo mette nelle colonna successive?

poi dove c'è la serie del numero mi da il gg e mese
forse separandoli in più colonne non dovrebbero comportarsi come data
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: come funziona lo step in ciclo

Postdi Anthony47 » 29/11/23 23:03

Nella Sub CkDoppio aggiornare questa istruzione:
Codice: Seleziona tutto
            Cells(R + R2, 10) = "'" & Cells(R + R2, 10) & " - " & ccNum
Avatar utente
Anthony47
Moderatore
 
Post: 19430
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: come funziona lo step in ciclo

Postdi giorgioa » 30/11/23 10:02

OK Anthony ora funziona perfettamente

Grazie e buona giornata
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00


Torna a Applicazioni Office Windows


Topic correlati a "come funziona lo step in ciclo":


Chi c’è in linea

Visitano il forum: papiriof e 16 ospiti