Condividi:        

Macro che dopo prove rallenta?

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

Macro che dopo prove rallenta?

Postdi papiriof » 30/03/23 15:15

ho questa macro penso abbastanza esplicativa , mi propone 5 num diversi compresi tra 1 e 90 SE LA CELLA RIGA 1 COLONNA 19 E' = ALLA CELLA RIGA 1 COLONNA 17 ESCE DALLA MACRO le prime volte che la ho lanciata aveva una certa velocità (soddisfacente in relazione a quello che chiedevo) dopo un certo numero di lanci però è andata ad "afflosciarsi". Non capisco, anche se chiedevo soluzioni che prima le faceva diciamo in 2o /30 secondi adesso (per le stesse richieste vedo che raggiunge anche 10 minuti anche togliendo gli apici a'Application.ScreenUpdating = False non migliora granchè , che spiegazione ci può essere?????
Public Sub Proponi5()
'Application.ScreenUpdating = False
Dim numeri(5) As Long
Dim a As Long
Dim b As Long
Dim n As Integer
Randomize ' IMPORTANTE
Do
ReDim aB(90) As Boolean
For a = 1 To 5 ' riempie la matrice con numeri casuali
n = Int(Rnd * 90 + 1)
Do While aB(n) = True
n = Int(Rnd * 90 + 1)
Loop
numeri(a) = n
aB(n) = True
Next a'
For a = 1 To 5 'riempie le celle
Cells(1, a) = numeri(a)
Next a
If Cells(1, 19) <= Cells(1, 17) Then Exit Do 'SE LA CELLA RIGA 1 COLONNA 19 E' = ALLA CELLA RIGA 1 COLONNA 17 ESCE DALLA MACRO
Loop
' Application.ScreenUpdating = True
End Sub
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Sponsor
 

Re: Macro che dopo prove rallenta?

Postdi Marius44 » 30/03/23 16:08

Ciao
Non credo sia il motivo (o uno dei motivi) del problema dichiarato ma fai attenzione che il codice
If Cells(1, 19) <= Cells(1, 17) Then Exit Do
non è esattamente quello che dichiari, cioè
'SE LA CELLA RIGA 1 COLONNA 19 E' = ALLA CELLA RIGA 1 COLONNA 17 ESCE DALLA MACRO

Il codice dice: se è MINORE o UGUALE (non solo uguale)

Ciao,
Mario
Marius44
Utente Senior
 
Post: 658
Iscritto il: 07/09/15 22:00

Re: Macro che dopo prove rallenta?

Postdi Anthony47 » 30/03/23 18:07

Fatta salva l'osservazione di Mario (vedi sopra) evidentemente sui 5 numeri estratti fai delle elaborazioni con formule che sono (diventate più) pesanti da eseguire.
Puoi probabilmente ottenere un piccolo miglioramento sostituendo le 3 righe del ciclo For a = 1 To 5 'riempie le celle / Next a con
Codice: Seleziona tutto
    Range("A1:E1") = numeri

Ma probabilmente bisogna guardare le formule che legate alle celle Q1 ed S1 per altre opportunita' di miglioramento

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

Re: Macro che dopo prove rallenta?

Postdi papiriof » 01/04/23 08:49

20 66 70 74 71 -------------------------- 10 -------10
A1:E1 è l'ntervallo che cambia in continuazione finchè non non raggiunge lo scopo
80 17 86 13 30
18 51 12 15 6
57 30 70 56 69 1 ---------> formulaMATR.SOMMA.PRODOTTO(CONTA.SE(C5:G5;A$1:E$1))
25 43 76 14 32
66 70 90 71 56 3
73 15 19 88 47
69 74 57 62 18 1
76 59 86 84 25
73 10 12 48 88
30 74 20 34 82 2
53 34 65 49 39
8 46 42 75 55
1 2 9 56 48
37 90 13 7 58
71 69 26 9 37 1
80 82 9 26 3
43 22 82 80 17
16 78 17 10 89
9 21 14 34 76
20 83 78 2 38 1
17 32 47 24 63
84 80 26 24 88
63 73 51 16 58
25 47 35 20 9 1
41 88 5 22 37
80 35 90 49 65
67 36 58 68 33
38 84 22 32 4
29 2 3 27 11
85 51 66 45 4 1
79 39 20 51 52 1
75 15 67 54 52
23 39 14 4 72
2 29 30 44 11
23 89 28 82 73
24 79 23 59 40
71 77 68 65 66 2
5 60 31 76 75
79 26 72 37 34
66 20 9 24 82 2
23 43 41 17 18
84 18 65 71 67 1
3 17 30 15 2
43 1 65 76 40
75 26 11 74 12 1
62 37 13 74 54 1
20 22 71 49 30 2
74 16 60 71 72 2
85 24 10 29 59
11 40 88 76 23
34 40 63 20 10 1
30 62 81 31 71 1
74 30 7 16 48 1
21 1 70 90 81 1
36 74 22 54 80 1
38 11 74 15 72 1
62 67 70 89 74 2
9 43 57 70 80 1
84 79 82 36 63
74 15 59 31 77 1
11 25 64 6 4
18 42 26 13 89
42 46 39 44 1
35 13 41 12 21
46 43 14 39 3
5 16 47 3 48
18 60 66 51 19 1
71 11 74 36 8 2
42 24 20 18 11 1
36 21 81 72 66 1
58 68 31 23 12
70 29 88 80 22 1
68 79 81 18 23
51 55 70 21 38 1
59 66 31 45 33 1
78 9 84 86 15
47 23 61 46 41
49 76 34 83 53
10 85 28 67 13
80 8 18 35 26
37 56 71 69 85 1
69 72 82 70 84 1
51 50 15 48 32
1 18 29 2 58
88 57 81 78 14
54 12 61 33 77
88 71 13 66 41 2
66 61 81 25 26 1
70 18 42 62 57 1
13 22 69 60 47
1 87 20 61 66 2
5 82 35 89 53
67 36 33 8 3
7 47 79 53 14
66 88 31 38 86 1
27 37 39 41 61
41 48 3 70 43 1
54 35 1 60 53
20 63 79 29 53 1
87 31 14 24 59
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: Macro che dopo prove rallenta?

Postdi papiriof » 01/04/23 08:52

20 66 70 74 71 -------------------------- 10 -------10
A1:E1 è l'ntervallo che cambia in continuazione finchè non non raggiunge lo scopo
80 17 86 13 30
18 51 12 15 6
57 30 70 56 69 1 ---------> formulaMATR.SOMMA.PRODOTTO(CONTA.SE(C5:G5;A$1:E$1))
25 43 76 14 32
66 70 90 71 56 3
73 15 19 88 47
69 74 57 62 18 1
76 59 86 84 25
73 10 12 48 88
30 74 20 34 82 2
53 34 65 49 39
8 46 42 75 55
1 2 9 56 48
37 90 13 7 58
71 69 26 9 37 1
80 82 9 26 3
43 22 82 80 17
16 78 17 10 89
9 21 14 34 76
20 83 78 2 38 1
17 32 47 24 63
84 80 26 24 88
63 73 51 16 58
25 47 35 20 9 1
41 88 5 22 37
80 35 90 49 65
67 36 58 68 33
38 84 22 32 4
29 2 3 27 11
85 51 66 45 4 1
79 39 20 51 52 1
75 15 67 54 52
23 39 14 4 72
2 29 30 44 11
23 89 28 82 73
24 79 23 59 40
71 77 68 65 66 2
5 60 31 76 75
79 26 72 37 34
66 20 9 24 82 2
23 43 41 17 18
84 18 65 71 67 1
3 17 30 15 2
43 1 65 76 40
75 26 11 74 12 1
62 37 13 74 54 1
20 22 71 49 30 2
74 16 60 71 72 2
85 24 10 29 59
11 40 88 76 23
34 40 63 20 10 1
30 62 81 31 71 1
74 30 7 16 48 1
21 1 70 90 81 1
36 74 22 54 80 1
38 11 74 15 72 1
62 67 70 89 74 2
9 43 57 70 80 1
84 79 82 36 63
74 15 59 31 77 1
11 25 64 6 4
18 42 26 13 89
42 46 39 44 1
35 13 41 12 21
46 43 14 39 3
5 16 47 3 48
18 60 66 51 19 1
71 11 74 36 8 2
42 24 20 18 11 1
36 21 81 72 66 1
58 68 31 23 12
70 29 88 80 22 1
68 79 81 18 23
51 55 70 21 38 1
59 66 31 45 33 1
78 9 84 86 15
47 23 61 46 41
49 76 34 83 53
10 85 28 67 13
80 8 18 35 26
37 56 71 69 85 1
69 72 82 70 84 1
51 50 15 48 32
1 18 29 2 58
88 57 81 78 14
54 12 61 33 77
88 71 13 66 41 2
66 61 81 25 26 1
70 18 42 62 57 1
13 22 69 60 47
1 87 20 61 66 2
5 82 35 89 53
67 36 33 8 3
7 47 79 53 14
66 88 31 38 86 1
27 37 39 41 61
41 48 3 70 43 1
54 35 1 60 53
20 63 79 29 53 1
87 31 14 24 59
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: Macro che dopo prove rallenta?

Postdi Anthony47 » 01/04/23 20:47

Quanto hai pubblicato non spiega perche' i tempi si dilatino man mano che fai le prove; a meno che l'elenco delle cinquine da confrontare non si allunghi sistematicamente.
Comunque puoi ottenere significativi miglioramenti aggiungendo Application.ScreenUpdating = False /True e scrivendo in blocco i cinque numeri di prova piuttoto che uno per uno.
Il codice con queste migliorie:
Codice: Seleziona tutto
Public Sub Proponi5()
Application.ScreenUpdating = False
Dim numeri(1 To 5) As Long
Dim a As Long
Dim b As Long
Dim n As Integer
Randomize ' IMPORTANTE
mytim = Timer
Do
Application.ScreenUpdating = False
doCnt = doCnt + 1
    ReDim ab(90) As Boolean
    For a = 1 To 5 ' riempie la matrice con numeri casuali
        n = Int(Rnd * 90 + 1)
        Do While ab(n) = True
            n = Int(Rnd * 90 + 1)
        Loop
        numeri(a) = n
        ab(n) = True
    Next a '
   
'    For a = 1 To 5 'riempie le celle
'        Cells(1, a) = numeri(a)
'    Next a
    Range("A1:E1") = numeri
'DoEvents
    If Cells(1, 19) <= Cells(1, 17) Then Exit Do 'SE LA CELLA RIGA 1 COLONNA 19 E' = ALLA CELLA RIGA 1 COLONNA 17 ESCE DALLA MACRO
'Stop
Loop
Application.ScreenUpdating = True
Debug.Print Format(Timer - mytim, "0.00"), doCnt, Format((Timer - mytim) / doCnt, "0.000")
Beep
 Application.ScreenUpdating = True
End Sub

Ovviamente, siccome tu fai una "ricerca per obiettivo", piu' l'obiettivo e' ambizioso e statisticamente piu' cicli la macro dovra' fare per trovare la combinazione che realizza l'obiettivo
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che dopo prove rallenta?

Postdi papiriof » 02/04/23 08:03

Ovviamente, siccome tu fai una "ricerca per obiettivo", piu' l'obiettivo e' ambizioso e statisticamente piu' cicli la macro dovra' fare per trovare la combinazione che realizza l'obiettivo
Quanto sopra è vero!!!!! Però la velocità della macro è aumentata .Adesso mi da molto velocemente un risultato valido es: in s1 metto 10 rapidamente la macro mi indica la cinquina che se le avessi giocata mi avrebbe dato almeno 10 ambi , allora provo con 11 vedo che mi da la cinquina con 11 ambi o con sorti superiori ma quando metto 12 fa fatica e allora rimetto la cinquina trovata con 11 con l'ausilio di un modulo di controllo cambio un numero alla volta della cinquina precedente e istantaneamente vedo se va a 12 o a 13.
Win 7+Office 2010
papiriof
Utente Senior
 
Post: 407
Iscritto il: 16/02/10 13:23

Re: Macro che dopo prove rallenta?

Postdi Anthony47 » 02/04/23 15:47

Trattandosi di "sorteggio" potresti aver il risultato cercato alla prima estrazione, o dopo 100 o dopo 1000... e' tutto aleatorio...

Con l'ultima macro ho inserito la registrazione dei risultati nella finestra "Immediata" del vba: se dal vba apri la finestra immediata a conclusione della macro vedrai un risultato tipo:
Codice: Seleziona tutto
0,42           159          0,003
0,06           5            0,013
1,79           764          0,002
1,54           653          0,002
0,92           366          0,003
1,79           751          0,002
Questo e' il risultato di 5 cicli, con lo stesso elenco di cinquine e lo stesso obiettivo
Le colonne dicono:
-Secondi impiegati
-Num di cicli necessari per avere il risultato
-Secondi necessari per ogni ciclo

Controlla nel tuo caso; il parametro che conta e' il terzo, i secondi necessari per ogni ciclo: come vedi nei miei test e' stabile (0.003 sec), quello che determina il tempo complessivo e' il numero di giocate che bisogna fare prima di avere il risultato cercato.

Come vedi la stessa macro eseguita 6 volte con lo stesso obiettivo puo' richiedere 5 cicli oppure 764, con un tempo (nel mio ambiente di test) che va da 0.06 sec a 1.79sec; ma ripeto: potresti aver il risultato cercato al primo tentativo o (teoricamente) potresti non averlo nemmeno dopo 10mila tentativi
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Macro che dopo prove rallenta?":


Chi c’è in linea

Visitano il forum: Nessuno e 18 ospiti

cron