Sviluppare funzionalita su Microsoft Office con VBA Generare un numero rando da 1 a 6 sempre diverso

Login Registrati
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #31663 Score: 0 | Risposta

    Oscar
    Partecipante
      45 pts

      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`
      #31664 Score: 0 | Risposta

      Marius44
      Moderatore
        58 pts

        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

        #31665 Score: 0 | Risposta

        Oscar
        Partecipante
          45 pts

          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

           

          #31666 Score: 0 | Risposta

          Oscar
          Partecipante
            45 pts

            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

             

            #31667 Score: 0 | Risposta

            Oscar
            Partecipante
              45 pts

              No non va , va solo se uso le celle 

              #31668 Score: 0 | Risposta

              patel
              Moderatore
                51 pts

                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.

                #31669 Score: 0 | Risposta

                Marius44
                Moderatore
                  58 pts

                  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 Sub

                  Come 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

                  #31670 Score: 0 | Risposta

                  Oscar
                  Partecipante
                    45 pts

                    patel ha scritto:

                    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 

                    #31671 Score: 0 | Risposta

                    Oscar
                    Partecipante
                      45 pts

                      Marius44 ha scritto:

                      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 

                      #31674 Score: 0 | Risposta

                      Oscar
                      Partecipante
                        45 pts

                        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 

                        #31675 Score: 0 | Risposta

                        Marius44
                        Moderatore
                          58 pts

                          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

                          #31676 Score: 0 | Risposta

                          Oscar
                          Partecipante
                            45 pts

                            Marius44 ha scritto:

                            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

                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: Generare un numero rando da 1 a 6 sempre diverso
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: