Excel Forum Per condividere esperienze su Microsoft Excel

Generare valori casuali tra due numeri decimali senza ripetizioni

  • Messaggi
  • OFFLINE
    Fra.R
    Post: 6
    Registrato il: 17/06/2019
    Città: MILANO
    Età: 19
    Utente Junior
    Microsoft Office 2013
    00 24/04/2020 18:51
    Salve a tutti. Volevo sapere come posso generare 8 numeri casuali (ma anche di più o meno, a scelta insomma) tra due numeri aventi tre cifre decimali, senza ripetizioni, ovvero i numeri ottenuti devono essere tutti diversi tra loro.
    Ad es 8 numeri compresi tra 10,134 e 10,467.
    Ho provato con la funzione casuale tra ma ottengo numeri uguali tr loro a volte.
    Grazie mille a chi mi risponderà.
  • OFFLINE
    DANILOFIORINI
    Post: 703
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 24/04/2020 20:03
    Ciao
    senza creare colonne di appoggio in B3 da trascinare in basso


    =10+AGGREGA(15;6;RIF.RIGA($134:$467)/(CONTA.SE(B$2:B2;RIF.RIGA($134:$467))=0);CASUALE.TRA(1;334-CONTA.NUMERI(B$2:B2)))/1000

    se la dovessi mettere in un'altra cella devi avere l'accortezza di cambiare l'intervallo del CONTA.SE(la parte in rosso cioè se la metti in A10 devi scrivere A$9:A9) e sopra la cella dove metti la formula non ci devono essere numeri

    P.S. formatta in numero con 3 decimali
    [Modificato da DANILOFIORINI 24/04/2020 20:07]
  • OFFLINE
    Fra.R
    Post: 6
    Registrato il: 17/06/2019
    Città: MILANO
    Età: 19
    Utente Junior
    Microsoft Office 2013
    00 25/04/2020 08:15
    DANILOFIORINI, 24/04/2020 20:03:

    Ciao
    senza creare colonne di appoggio in B3 da trascinare in basso


    =10+AGGREGA(15;6;RIF.RIGA($134:$467)/(CONTA.SE(B$2:B2;RIF.RIGA($134:$467))=0);CASUALE.TRA(1;334-CONTA.NUMERI(B$2:B2)))/1000

    se la dovessi mettere in un'altra cella devi avere l'accortezza di cambiare l'intervallo del CONTA.SE(la parte in rosso cioè se la metti in A10 devi scrivere A$9:A9) e sopra la cella dove metti la formula non ci devono essere numeri

    P.S. formatta in numero con 3 decimali

    Ciao, grazie per la formula. Se volessi cambiare l'intervallo dei numeri? Ho visto che al posto del 10 posso mettere l'intero, ma per quanto riguarda i decimali mi sono perso, non riesco a variarli. Cambio l'intervallo in riferimento riga ma mi da errore, puoi dirmi come andare a modificare per cambiare i numeri dopo la virgola? grazie.
  • OFFLINE
    DANILOFIORINI
    Post: 704
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 25/04/2020 10:44
    Ciao
    togliamo l'intero come hai capito....la richiesta era di generare casuali.tra 0,134 e 0,467 se hai bisogno di cambiare i numeri la generalizzo cosi numero A numero B


    =INTERO+AGGREGA(15;6;RIF.RIGA($numA:$numB)/(CONTA.SE(B$2:B2;RIF.RIGA($numA:$numB))=0);CASUALE.TRA(1;NumB-NumA-CONTA.NUMERI(B$2:B2)))/1000
  • OFFLINE
    Fra.R
    Post: 7
    Registrato il: 17/06/2019
    Città: MILANO
    Età: 19
    Utente Junior
    Microsoft Office 2013
    00 25/04/2020 11:45
    Re:
    DANILOFIORINI, 25/04/2020 10:44:

    Ciao
    togliamo l'intero come hai capito....la richiesta era di generare casuali.tra 0,134 e 0,467 se hai bisogno di cambiare i numeri la generalizzo cosi numero A numero B


    =INTERO+AGGREGA(15;6;RIF.RIGA($numA:$numB)/(CONTA.SE(B$2:B2;RIF.RIGA($numA:$numB))=0);CASUALE.TRA(1;NumB-NumA-CONTA.NUMERI(B$2:B2)))/1000


    Buondì, grazie per la risposta. Ho provato la formula e funziona, solamente che a volte ottengo valori uguali tra loro, sbaglio io qualcosa?

  • OFFLINE
    DANILOFIORINI
    Post: 706
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 25/04/2020 16:34
    Ciao
    in effetti più sono i numeri e più c'è la possibilità di estrarre dei doppioni quindi bisogna usare una colonna di servizio e in rete se scrivi "casuale tra senza ripetizioni" trovi moltissimi esempi io propongo questa procedura in B1 e C1 mettiamo gli estremi all'interno dei quali estrarre i numeri casuali in A3 da trascinare in basso (eventualmente la colonna si può nasconderre)

    =10+CASUALE.TRA(($B$1-INT($B$1))*10^3;($C$1-INT($C$1))*10^3)/10^3

    Qui c'è il valore dell'intero fisso (ma eventualmente si può rendere dinamico)

    in B3 da trascinare in basso

    =SE.ERRORE(INDICE($A$3:$A$102;CONFRONTA(0;INDICE(CONTA.SE($B$2:B2;$A$3:$A$102&""););0));"")

    ho trascinato per 100 righe ma puoi farne di meno oppure impostare un numero max di righe da visualizzare...fai sapere
  • OFFLINE
    Fra.R
    Post: 8
    Registrato il: 17/06/2019
    Città: MILANO
    Età: 19
    Utente Junior
    Microsoft Office 2013
    00 25/04/2020 16:51
    DANILOFIORINI, 25/04/2020 16:34:

    Ciao
    in effetti più sono i numeri e più c'è la possibilità di estrarre dei doppioni quindi bisogna usare una colonna di servizio e in rete se scrivi "casuale tra senza ripetizioni" trovi moltissimi esempi io propongo questa procedura in B1 e C1 mettiamo gli estremi all'interno dei quali estrarre i numeri casuali in A3 da trascinare in basso (eventualmente la colonna si può nasconderre)

    =10+CASUALE.TRA(($B$1-INT($B$1))*10^3;($C$1-INT($C$1))*10^3)/10^3

    Qui c'è il valore dell'intero fisso (ma eventualmente si può rendere dinamico)

    in B3 da trascinare in basso

    =SE.ERRORE(INDICE($A$3:$A$102;CONFRONTA(0;INDICE(CONTA.SE($B$2:B2;$A$3:$A$102&""););0));"")

    ho trascinato per 100 righe ma puoi farne di meno oppure impostare un numero max di righe da visualizzare...fai sapere

    Ho provato cambiando i numeri e così funziona a dovere!
    Grazie mille per il tempo che ci hai dedicato, sei stato molto gentile.
  • OFFLINE
    by sal
    Post: 5.884
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 25/04/2020 17:36
    Numeri casuali
    Ciao Per avere la sicurezza dei numeri non ripetuti dovresti usare il VBA che controlla i numeri usciti con Cstr().

    un estratto del VBA

    Sub trova()
    Dim RndColl As New Collection, Num As Integer
    Dim i As Long, rng As Range, cl, dat(1 To 60)
    
    i = 1
    Worksheets("Foglio1").Activate
    Set rng = Range("E2:j10")
    For Each cl In rng
      dat(i) = cl.Value
      i = i + 1
    Next cl
    
    i = 1
    Worksheets("Foglio2").Activate
    Range("A2:B6").ClearContents
    Do Until RndColl.Count = 3
    Randomize
    Num = Int(60 * Rnd + 1)
    On Error Resume Next
    RndColl.Add Num, CStr(Num)
    On Error GoTo 0
    Cells(i, 2) = Num
    Cells(i, 1) = dat(Num)
    i = i + 1
    Loop
    
    End Sub


    questa macro genera numeri casuali da 1 a 60 senza ripetizioni

    vedi se puoi adattarla

    Ciao By Sal [SM=x423051]


    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    DANILOFIORINI
    Post: 708
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 25/04/2020 19:16
    Buonasera
    Ciao SAL anche con la seconda procedura proposta c'è la certezza di non avere ripetizione in quanto estraggo la lista univoca dei numeri creati con CASUALE.TRA
  • OFFLINE
    by sal
    Post: 5.885
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 26/04/2020 08:03
    Numeri casuali
    Ciao Danilo, la mia era solo una soluzione alternativa, le formule come ho detto altre vole per me fino ad un certo punto le comprendo ma poi diventano scrutta araba o cirillica.

    Anzi sono stupito di ciò che riesci a tirare fuori con le formule vorrei esserne anche io capace, mi eviterebbe di scrivere tanto codice.

    ciao By Sal [SM=x423051]

    [Modificato da by sal 26/04/2020 08:04]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    DANILOFIORINI
    Post: 710
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 26/04/2020 10:52
    Ciao
    @Sal mica voleva essere un appunto.....ci mancherebbe benvengano soluzioni alternative...nell'atrofia celebrale da quarantena avevo supposto che pensavi che con la procedura proposta si potevano sviluppare doppi....

    un saluto e a presto