Random nummers zonder dubbels

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • SsorcererR
  • Registratie: November 2013
  • Laatst online: 08-05 08:08
Hoi!

Ik zou een Excel bestand moeten aanmaken met 25 kolommen en 6000 lijnen in.
Elke lijn moet 25 random nummers bevatten tussen 1 en 75, zonder dat er in dezelfde lijn een dubbel nummer voorkomt. Hoe pak ik dit best aan?

Thanks voor de hulp alvast!

Alle reacties


Acties:
  • 0 Henk 'm!

  • sypie
  • Registratie: Oktober 2000
  • Niet online
Kun je niet een bingokaartengenerator gebruiken? 25 nummertjes, 6000 kaarten waar geen dubbele nummers op staan en klaar

Acties:
  • 0 Henk 'm!

  • SsorcererR
  • Registratie: November 2013
  • Laatst online: 08-05 08:08
Misschien wel, maar de generators die ik tot op heden vond konden geen 25 cellen in één lijn plaatsen, dit is nodig voor de verdere verwerking van het bestand. (dus één lijn met 25 cellen is één record)

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Is het eenmalig of ga je het vaker gebruiken? Als vaker: is het een probleem als een tweede keer het bestand openen er een andere lijst komt? De rand() functie kan immers iedere keer opnieuw 'afvuren' en een ander resultaat geven. Dat wil je vast niet, dan is een stukje VBA wellicht veruit het makkelijkst. FOR-loopje voor de rijen, FOR-loopje voor de kolommen, genereer willekeurig getal, herijk naar [1..75] of als ik je letterlijk neem [2..74] bijvoorbeeld door *75 te doen en dan af te ronden (wel even opletten hoe je afrondt, omdat anders bijv. 1 of 75 te vaak wordt getrokken!), check of trekking al bestaat op de rij en zo ja: herhaal en zo nee: plaats

Je zult sowieso enige gevonden werkwijze moeten aanpassen naar jouw specifieke wensen, zoals aantallen rijen en kolommen. Je zult wel inspiratie kunnen vinden, maar geen 1-op-1 bruikbare oplossing. Waar loop je vast bij een 'lottery generator', bijvoorbeeld: welke VBA-code heb je nu?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 13:32

Dido

heforshe

Je zou ook (stukje VBA) gewoon voor elke rij de hele serie 1-75 kunnen husselen, bijvoorbeeld met met Fisher-Yates. Dan pak je de eerste 25.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • SsorcererR
  • Registratie: November 2013
  • Laatst online: 08-05 08:08
Iedereen alvast bedankt voor de reacties maar ik moet toegeven dat ik op dit gebied toch een beetje een leek ben ...
Het bestand daarentegen is voor éénmalig gebruik.

Acties:
  • +2 Henk 'm!

  • SadisticPanda
  • Registratie: Februari 2009
  • Niet online

SadisticPanda

Heet patatje :o

Stukje python code
code:
1
2
3
4
5
import random

for x in range(0, 6000):
    rij = random.sample(range(1, 76), 25)
    print(str(rij)[1:-1])


Kan je in excel importeren dan als komma gescheiden;

Heb je geen python, dan kan je 1 van de online python generators gebruiken al raad ik ja dan aan om geen 6000 lijnen ineens te doen. (Heeft browser niet graag). Doe dan zelf 6 keer 1000 ofso. BV https://repl.it/languages/python3

Plakken in txt file en klaar.
(Ja ik kon dit in python code ook in text file laten doen maar dan werkt het niet in browser ;) )

[ Voor 3% gewijzigd door SadisticPanda op 26-08-2016 11:24 ]

Marstek 5.12kw v151, CT003 v117, Sagecom Xs212 1P,


Acties:
  • 0 Henk 'm!

  • TI_Observer
  • Registratie: April 2006
  • Laatst online: 10:06
azz_kikr schreef op vrijdag 26 augustus 2016 @ 11:23:
Stukje python code
code:
1
2
3
4
5
import random

for x in range(0, 6000):
    rij = random.sample(range(1, 76), 25)
    print(str(rij)[1:-1])


Kan je in excel importeren dan als komma gescheiden;

Heb je geen python, dan kan je 1 van de online python generators gebruiken al raad ik ja dan aan om geen 6000 lijnen ineens te doen. (Heeft browser niet graag). Doe dan zelf 6 keer 1000 ofso. BV https://repl.it/languages/python3

Plakken in txt file en klaar.
(Ja ik kon dit in python code ook in text file laten doen maar dan werkt het niet in browser ;) )
:)

Ik lieg ALTIJD... zie je dat was weer een leugen!


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dido schreef op vrijdag 26 augustus 2016 @ 11:02:
Je zou ook (stukje VBA) gewoon voor elke rij de hele serie 1-75 kunnen husselen, bijvoorbeeld met met Fisher-Yates. Dan pak je de eerste 25.
Lijkt me idd een betere oplossing dan nummers genereren en checken of ze al voorkomen in de rij. De kans dat je in één keer 25 unieke nummers trekt ligt zo rond de 0,007. :) Is ook niet zo moeilijk te implementeren:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Function RandomSample(MaxNumber As Integer, SampleSize As Integer) As Variant
    Dim i As Integer, j As Integer, k As Integer
    
   ' dimensioneer arrays base 1
    ReDim bron(1 To MaxNumber)
    ReDim result(1 To SampleSize)
    
    'vul het bron array
    For i = 1 To MaxNumber
        bron(i) = i
    Next i
    
    'Fisher Yates
    Randomize
    For j = 1 To SampleSize 
        k = 1 + Int(Rnd() * MaxNumber)
        result(j) = bron(k)
        bron(k) = bron(MaxNumber)
        MaxNumber = MaxNumber - 1
    Next j
    
    RandomSample = result
    
End Function


Dit kun je rechtstreeks gebruiken als matrixformule of je roept hem aan met een macro om een werkblad te vullen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
Public Sub PrintRandomSample()
    Dim i As Integer, j As Integer, v As Variant
    
    For i = 1 To 6000
        v = RandomSample(75, 25)
        For j = 1 To 25
            ActiveSheet.Cells(i, j) = v(j)
        Next j
    Next i
End Sub

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1