› Sviluppare funzionalita su Microsoft Office con VBA › Generare un numero rando da 1 a 6 sempre diverso
-
AutoreArticoli
-
Salve ragazzi
sto cercando di generare un numero random da 1 a 6 senza che si ripeta 2 volte lo stesso numero , in teoria la macro dovrebbe andar bene , ma in pratica dopo un pò mi ridà lo stesso numero
se qualcuno ha qualche indicazione da darmi ringrazio tutti
`Sub Sempre_diverso() Dim uno, due As String due = Int((6 * Rnd)) + 1 Do uno = Int((6 * Rnd)) + 1 If uno <> due Then Exit Do Loop MsgBox uno End Sub`Ciao
forse con sto caldo non ragiono più.
Vedo dal codice postato che scrivi Dim uno, due as string e, in tal modo, solo la seconda variabile è string mentre la prima è variant. Sarebbe più corretto, a mio modesto parere, Dim uno as integer, due as integer visto che si tratta di generare numeri piccoli.
Adesso veniamo al codice. La macro genera il primo numero quindi prosegue col generare il secondo. A questo punto se uno <> due allora esce dal ciclo (se ho capito bene).
Cosa intendi con ma in pratica dopo un pò mi ridà lo stesso numero?
Ciao,
Mario
Ciao Marius si li è string perchè le ho provate tutte , ma non va bene in nessun modo , va solo se scrivo su cella , ma a mè servirebbe in variabile , comunque se non ci sono alternative mi adatterò ad usare una cella
Mario ho capito perchè non va , perchè la variante due è sempre diversa dalla uno , ma non dal numero precedente , quindi la soluzione è salvare il numero predente in una variabile e il numero sucessivo deve essere sempre diverso , domani provo poi ti faccio sapere ciao Oscar
Dovresti spiegare un po' meglio il tuo obiettivo e come intendi usare la tua macro, è inevitabile che i numeri si ripetano visto che ne hai solo 6 a disposizione, quindi il sempre diverso penso si riferisca al numero precedente. Il fatto che con le celle ti funzioni significa che devi dichiarare le variabili (integer) fuori della sub.
Ciao
Se ho capito l'obiettivo vorresti che i dati estratti casualmente (sia per uno sia per due) siano memorizzati in due variabili differenti (che potrai utilizzare come e dove vuoi). Se così è, prova con questa macro
Sub Sempre_diverso() Dim uno As Integer, due As Integer Dim estratto() As Integer, estratto2() As Integer For i = 0 To 5 ricomincia: Randomize uno = Int((6 * Rnd)) + 1 Randomize due = Int((6 * Rnd)) + 1 ReDim Preserve estratto(0 To i) estratto(i) = uno If i > 0 Then For j = 0 To i - 1 If uno = estratto(j) Then GoTo ricomincia Next j End If If i = 0 Then If uno <> due Then ReDim Preserve estratto2(0 To i) estratto2(i) = due ElseIf uno = due Then GoTo ricomincia End If ElseIf i > 0 Then If uno <> due Then ReDim Preserve estratto2(0 To i) estratto2(i) = due For j = 0 To i - 1 If due = estratto2(j) Then GoTo ricomincia Next j ElseIf uno = due Then GoTo ricomincia End If End If Next i Stop End SubCome vedi, prima di End Sub ho messo uno Stop per darti modo di visualizzare le variabili utilizzate e vedrai che estratto e estratto2 hanno valori differenti (da 1 a 6) ciascuna ma mai nella stessa posizione.
Fai sapere. Ciao,
Mario
Dovresti spiegare un po' meglio il tuo obiettivo e come intendi usare la tua macro, è inevitabile che i numeri si ripetano visto che ne hai solo 6 a disposizione, quindi il sempre diverso penso si riferisca al numero precedente. Il fatto che con le celle ti funzioni significa che devi dichiarare le variabili (integer) fuori della sub.
Ciao patel si hai ragione a dire che è inevitale che esca lo stesso numero per 2 volte , ma se uso una cella dove scrivo sempre l'ultimo numero uscito con ul loop funziona perchè nella cella c'è il numero precedente e me lo cambia a un numero diverso , mentre se uso una variabile e salvo il numero precedente , non lo confronta con l'ultimo uscito e lo accetta anche se è uguale
Ciao
Ciao Mario ho provato ma non termina il ciclo , ma credo che non ne valga la pena impazzire così tanto , lo posso fare maualmente , oppure usare un progressivo dove da 1 passo a 2 poi 3 fino a 6 credo che mi convenga
ringrazio tutti per la vostra attenzione e auguro un buon fine settimana a tutti
Oscar
X Patel
Ciao patel quello che devo fare se lo faccio manualmente è tutto molto semplice ora ti spiego
Si tratta della roulette che ha 6 metodi di previsione gioco , utilizando tutti i 6 metodi insieme , nel giro di 70-80 spinner , c'è nè sempre uno che ti butta fuori , è ovvio che non si sa mai qul'è altrimenti sarebbe troppo facile , quindi la mia intenzione era quella di usare un solo metodo per volta e ogni 20 spinner camabiare in automatico e modalità ramdom il metodo di gioco , per evitare di essere buttati fuori subito o almeno ridurre che ciò accada , ma se si ripete lo stesso numero , lo stesso gioco invece di cambiare a 20 spinner andrebbe a cambiare ogni 40 spinner e sono troppi perchè rischi di essere buttato fuori ugualmente
In oltre volevo fare una cosa semplice , e non andare a introdurre un cosa troppo complicata nel mezzo di un codice che è già un romanzo
Ti ringrazio per la tua risposta
Ciao
Torno adesso dal mare. Cosa intendi con "non completa il ciclo"? Come ti ho detto alla fine ho inserito uno stop per darti modo di vedere le due array estratto e stratto2 che contengono entrambi 6 valori differenti ciascuno e in posizione diversa l'una dall'altra.
Per quel che ho capito io, a me funziona.
Ciao,
Mario
Cosa intendi con "non completa il ciclo"?
Che una volta lanciato la macro non arriva piu alla fine
Ho riprovato adesso parte , ma dopo un po che provi va di nuovo in blocco
-
AutoreArticoli
