Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Excel Macro x 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

Excel Macro x Ciclo

Postdi Statix » 28/06/09 16:44

Ciao a tutti,
ho un problema per una macro,
dovrei fare un ciclo di 2 celle,
esempio
K1= 1 to 89 * L1=1 to 89
avrò in totale 7921 combinazioni
ad ogni ciclo ho un valore in N1,questi valori dovrebbero essere memorizzati(7921 valori ) e alla fine di questi mi devo ricavare il valore più alto in una cella P1.
il problema è come faccio a memorizzare questi valori e ricavare il più alto?
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Sponsor
 

Re: Excel Macro x Ciclo

Postdi Flash30005 » 28/06/09 17:14

Metti questa formula in P1
Codice: Seleziona tutto
=MAX(O1:O7921)

e crea una macro così
Codice: Seleziona tutto
Sub Calcolo()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Incr = 0
For K = 1 To 89
ValK = Worksheets("Foglio1").Range("K" & K).Value
    For L = 1 To 89
    ValL = Worksheets("Foglio1").Range("L" & L).Value
    Incr = Incr + 1
    Worksheets("Foglio1").Range("O" & Incr).Value = ValK * ValL
    Next L
Next K
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 18:53

Ciao Flash3005
ho provato la macro,ma non fa quello che chiedevo,forse mi sono espresso male.
Allora,cerco di spiegarmi meglio,
nelle celle
K1 e L1 le metto di partenza ad valore = 1,da calcoli in N1 ho un valore diciamo 35
la macro dovrebbe far ciclare le 2 celle K1 e L1
esempio di partenza
K1=1 L1=1 N1=35
K1=2 L1= 1 N1 =47
K1=3 L1=1 N1 =23
per un totale di 7921 combinazioni memorizzando di volta in volta il valore di N1
l'ultima sarebbe K1=89 L1=89
infine da N1 ricavo il valore Max
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Flash30005 » 28/06/09 21:08

Statix ha scritto:ho provato la macro,ma non fa quello che chiedevo,forse mi sono espresso male.
Allora,cerco di spiegarmi meglio,
nelle celle
K1 e L1 le metto di partenza ad valore = 1,da calcoli in N1 ho un valore diciamo 35
la macro dovrebbe far ciclare le 2 celle K1 e L1
esempio di partenza
K1=1 L1=1 N1=35
K1=2 L1= 1 N1 =47
K1=3 L1=1 N1 =23
per un totale di 7921 combinazioni memorizzando di volta in volta il valore di N1
l'ultima sarebbe K1=89 L1=89
infine da N1 ricavo il valore Max


Prima dicevi che era la Cella P1 ora invece è N1
Ma quell'N1 che cambia una volta è 35 un'altra volta è 47 e poi 23 da cosa deriva dal prodotto K*L? (intendo dire Cella K1 per L1 e poi K2 per L1 etc)
Se è così, allora prova questa macro
Codice: Seleziona tutto
Sub Calcolo()
Application.ScreenUpdating = False
Application.Calculation = xlManual
MaxValore = 0
Valore = 0
For K = 1 To 89
ValK = Worksheets("Foglio1").Range("K" & K).Value
    For L = 1 To 89
    ValL = Worksheets("Foglio1").Range("L" & L).Value
     Valore = ValK * ValL
     If Valore > MaxValore Then MaxValore = Valore
    Next L
Next K
Worksheets("Foglio1").Range("N1").Value = MaxValore
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 21:32

Ciao Flash3005
ho provato anche questa ,non va.
cerco di spiegarmi meglio cosa devo fare.
Adesso, manualmente nel range K1 e L1
metto 1 e 1 e tramite dei calcoli con delle formule mi ricavo 2 valori nel range X1:Y1
prendo la combinazione 1-1 e i 2 valori X1:Y1 e li memorizzo in N1:O1 e Q1:R1
vedi foto
poi ricomincio metto 2 e 1 e faccio la stessa cosa
poi 3 -1 e cosi via devo fare questo per 7921 combinazioni. :( :( :(
Immagine
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Flash30005 » 28/06/09 22:46

Mah!
Tu in pratica vuoi scrivere con una macro nelle due colonne N e O quello che vedo nell'immagine?
Prova questa
Codice: Seleziona tutto
Sub Combinazioni()
Application.ScreenUpdating = False
Application.Calculation = xlManual
NumO = 0
NumC = 0
For N = 1 To 7921
    NumC = (NumC + 1) Mod 89
    If NumC = 0 Then NumC = 89
    If NumC = 1 Then
    NumO = (NumO + 1) Mod 89
    If NumO = 0 Then NumO = 89
    End If
    Worksheets("Foglio1").Range("N" & N).Value = NumC
    Worksheets("Foglio1").Range("O" & N).Value = NumO
    Next N
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 23:01

Ciao Flash3005
provata macro e ok ,mi genera le combinazioni,
ma le combinazioni devono andare in K1:L1 una ad una
cioè la macro mi crea la prima combinazione 1-1 e deve scrivere in K1:L1 1-1
poi crea la seconda combinazione 2 -1 e deve scrivere in K1:L1 2-1
e cosi per tutte le 7921 combinazioni.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 23:12

Ciao Flash
ho modificato la macro sembra funzionare,ho dovuto spuntare il calcolo manuale perchè non andava e si bloccava,i calcoli devono essere fatti ad ogni ciclo.
Codice: Seleziona tutto
Sub Combinazioni()
'Application.ScreenUpdating = False
'Application.Calculation = xlManual
NumO = 0
NumC = 0
For N = 1 To 7921
    NumC = (NumC + 1) Mod 89
    If NumC = 0 Then NumC = 89
    If NumC = 1 Then
    NumO = (NumO + 1) Mod 89
    If NumO = 0 Then NumO = 89
    End If
    Worksheets("Napoli").Range("K1").Value = NumC
    Worksheets("Napoli").Range("L1").Value = NumO
    Next N
'Application.ScreenUpdating = True
'Application.Calculation = xlCalculationAutomatic
End Sub
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Flash30005 » 28/06/09 23:19

Statix ha scritto:...ma le combinazioni devono andare in K1:L1 una ad una
cioè la macro mi crea la prima combinazione 1-1 e deve scrivere in K1:L1 1-1
poi crea la seconda combinazione 2 -1 e deve scrivere in K1:L1 2-1
e cosi per tutte le 7921 combinazioni.

Ma qui "poi crea la seconda combinazione 2 -1 e deve scrivere in K1:L1 2-1" volevi dire in K2:L2!
Perche se scrivi sempre su K1:L1 tutte le combinazioni alla fine del ciclo avrai 89 in K1 e 89 in L1
Quindi a cosa serve tutto il ciclo? Scrivici subito 89 - 89
Ma se proprio vuoi così allora modifica la macro in questa maniera (forse dovrai fare dei calcoli nel frattempo)
Codice: Seleziona tutto
Sub Combinazioni()
Application.ScreenUpdating = False
Application.Calculation = xlManual
NumO = 0
NumC = 0
For N = 1 To 7921
    NumC = (NumC + 1) Mod 89
    If NumC = 0 Then NumC = 89
    If NumC = 1 Then
    NumO = (NumO + 1) Mod 89
    If NumO = 0 Then NumO = 89
    End If
    Worksheets("Foglio1").Range("K1").Value = NumC
    Worksheets("Foglio1").Range("L1").Value = NumO
'<<<< qui inserisci la routine che devi far fare con i valori K1 e L1 che variano
    Next N
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 23:24

ho un problema ad ogni ciclo dovrei memorizzare 6 celle ,non so esattamente dove inserire il range nella macro.
basta un range di esempio R1:W1 poi modifico io
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Flash30005 » 28/06/09 23:35

Statix ha scritto:ho un problema ad ogni ciclo dovrei memorizzare 6 celle ,non so esattamente dove inserire il range nella macro.
basta un range di esempio R1:W1 poi modifico io


Ma se mi dici esattamente cosa devi fare facciamo prima
Vuoi i massimi valori che escono dopo tutto il ciclo?
Ma quali sono i valori che bisogna prendere e dove vuoi metterli?
Se è così puoi prendere come spunto la macro precedente dove prendeva il maxValore con la condizione se Valore > Maxvalore etc etc

Comunque se vuoi mettere i valori (Val 1...Val6 che sai solo tu) da R1 a W1 basta che inserisci al posto della riga dove vedi
'<<<< qui inserisci la routine che devi far fare con i valori K1 e L1 che variano

Codice: Seleziona tutto
Worksheets("Foglio1").Range("R1").Value = Val1
Worksheets("Foglio1").Range("S1").Value = Val2
Worksheets("Foglio1").Range("T1").Value = Val3
Worksheets("Foglio1").Range("U1").Value = Val4
Worksheets("Foglio1").Range("V1").Value = Val5
Worksheets("Foglio1").Range("W1").Value = Val6
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 23:40

allora il problema che ad ogni variaziane di K1:L1
mi cambiano 4 celle che io devo memorizzare insieme alla combinazione in foglioDati
la macro che devo applicare è questa
Codice: Seleziona tutto
sub copia()
Sheets("Napoli").Select
    Range("N3:S3").Select
    Selection.Copy
    Sheets("Dati").Select
    Range("D3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Sheets("Napoli").Select
end sub
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Statix » 28/06/09 23:45

Ciao Flash3005
ho risolto, grazie infinite
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Statix » 01/07/09 21:15

Ciao a tutti,volevo chiedere se era possibile velocizzare ulteriormente questa macro,premetto che la macro così come stà, funziona bene
Codice: Seleziona tutto
Sub Combinazioni()

NumO = 0
NumC = 0
For N = 1 To 7921
    NumC = (NumC + 1) Mod 89
    If NumC = 0 Then NumC = 89
    If NumC = 1 Then
    NumO = (NumO + 1) Mod 89
    If NumO = 0 Then NumO = 89
    End If
   Sheets("Napoli").Range("K1").Value = NumC
  Sheets("Napoli").Range("L1").Value = NumO
    Sheets("Napoli").Select
    Range("N3:W3").Select
    Selection.Copy
      Sheets("Dati").Select
    Range("D3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     Application.ScreenUpdating = True
     Next N
   
End Sub
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Anthony47 » 01/07/09 23:18

Prova a inserire Application.ScreenUpdating = False all' inizio della macro e spostare quell' Application.ScreenUpdating = True dopo Next N.
Poi, immagino che sul foglio ci siano dei calcoli che elaborano sulla base di quanto scrivi in K1 ed L1: prova quindi a inserire:
1) Application.Calculation = xlCalculationManual PRIMA di Sheets("Napoli").Range("K1").Value = NumC
2) Worksheets("Napoli").Calculate DOPO di Sheets("Napoli").Range("L1").Value = NumO
3) Application.Calculation = xlCalculationAutomatic subito prima di End Sub

Ciao, fai sapere...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel Macro x Ciclo

Postdi Statix » 01/07/09 23:34

Ciao Anthony
con la macro di prima in un minuto mi calcolava 120 combinazioni
adesso con le modifiche mi calcola 266 combinazioni,
quindi più del doppio,
adesso risparmio circa 20 minuti di tempo :) :) :)
uniche celle che non si aggiornano nel foglio Dati
le celle che calcolano i valori max e min con la formula indiretto.
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi Flash30005 » 01/07/09 23:43

Stavo preparando la macro per velocizzare e il miglio tempo ottenuto è stato di 51 secondi contro i 2 minuti iniziali

Ho trovato il Post di Anthony e ho messo applicato anche i suoi consigli
Il tempo di elaborazione è sceso ulterirmente a 43 secondi.

Meglio di così!...

Codice: Seleziona tutto
Sub Combinazioni()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
NumK = 0
NumL = 0
    Sheets("Dati").Select
For N = 1 To 7921
    NumK = (NumK + 1) Mod 89
    If NumK = 0 Then NumK = 89
    If NumK = 1 Then
    NumL = (NumL + 1) Mod 89
    If NumL = 0 Then NumL = 89
    End If
    Worksheets("Napoli").Range("K1").Value = NumK
    Worksheets("Napoli").Range("L1").Value = NumL
    Worksheets("Napoli").Calculate
    Sheets("Napoli").Range("N3:W3").Copy
    Sheets("Dati").Range("D3").PasteSpecial Paste:=xlPasteValues
    Rows("3:3").Insert Shift:=xlDown
    Next N
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub


Ciao

N.B Ho modificato il nome delle due variabili NumO e NumC con NumK e NUmL per rendere il codice più comprensibile
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Flash30005 » 01/07/09 23:50

Statix ha scritto:...
uniche celle che non si aggiornano nel foglio Dati
le celle che calcolano i valori max e min con la formula indiretto.

Aggiungi
Worksheets("Dati").Calculate
prima di Next N

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel Macro x Ciclo

Postdi Statix » 01/07/09 23:56

Ciao Flash3005
con la tua macro effettivamente va più veloce ,ma ho un problema per le righe nel foglio Dati,
nella colonna A ho dei record.
con Worksheets("Dati").Calculate
provato con la macro di Anthony,calcola circa 185 combinazioni al minuto,quindi un 50% in più
Statix
Windows 7,
Office 2010,
Statix
Utente Senior
 
Post: 1078
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Excel Macro x Ciclo

Postdi ricky53 » 02/07/09 00:03

Ciao,
qualche altra cosetta la guadagni sostituendo:

Codice: Seleziona tutto
Range("N3:W3").Select
      Selection.Copy
      Sheets("Dati").Select
      Range("D3").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
           :=False, Transpose:=False


Con
Codice: Seleziona tutto
Sheets("Napoli").Range("N3:W3").Copy
     Sheets("Dati"). Range("D3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False


Consiglio: evita il più possibile di utilizzare le “select” delle celle e dei fogli

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Excel Macro x Ciclo":


Chi c’è in linea

Visitano il forum: alfrimpa, patel e 17 ospiti