03. maj 2011 - 11:05Der er
7 kommentarer og 1 løsning
Lave en tilfældig orden af præmier
Jeg har en liste over antal af lotteripræmier i engelsk excel 2007 - den ser således :
A B "Præmienavn" "Antal" Skuffedarium 2 Dippedut 10 Himstregims 2 ......... 200 ....... 500
Kan jeg få hjælp til at lave en tilfældigheds-genereret (RAND)liste over præmier, så præmier bliver ligeligt ( men stadig tilfældigt ) fordelt udfra nogenlunde disse kritierer :
Samlet antal lodder til salg skal kunne skaleres til mellem 13.000 og 17.000 ( tallet varierer afhængigt af antal præmier ) - vi regner med ca 10% lodder med gevinst.
Der skal helst være ca. lige mange lige og ulige lodder med gevinst - dette er ikke et ultimativt krav da (RAND) jo tilfældigt vælger.
Altså : En formel/VBA-action der tager antal navngivne gevinster og fordeler dem jævnt/tilfældigt i et nyt ark
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
=RANDBETWEEN(1,13000) - kopier formlen det antal celler ned, som du ønsker numre. Vær opmærksom på, at du vil have et problem med dubletter
I VBA kunne koden se sådan ud:
Option Explicit
Function GetNos() Dim NO As Integer Dim AntalNos As Integer AntalNos = 100 Dim nos() As Integer ReDim nos(1 To AntalNos, 1 To 1) As Integer Dim x As Integer Dim InsR As Integer Dim MaxNo As Integer MaxNo = 13000
InsR = LBound(nos, 1)
Do While True ' Trækker et tilfældigt nummer Randomize NO = Int(MaxNo * Rnd) For x = LBound(nos, 1) To InsR Step 1 ' Tjekker for dubletter If InsR > 1 Then If NO = nos(InsR - 1, 1) Then GoTo NextNumber End If End If nos(InsR, 1) = NO InsR = InsR + 1
' Escape sekvens If InsR = UBound(nos, 1) + 1 Then Exit Do End If Next x NextNumber: Loop Range(Cells(LBound(nos, 1), 1), Cells(UBound(nos, 1), 1)) = nos() End Function
Koden tager ikke hensyn til fordelingen på lige og ulige numre.
Sig til, hvis du kan bruge det. Så poster jeg et svar.
Prøv med nedenstående. Jeg har kørt den 100 gange, og der ser ikke ud til at være dubletter. Jeg har også rettet den til, så den ikke kan komme med værdien nul.
Function GetNos() Dim NO As Integer Dim AntalNos As Integer AntalNos = 1300 Dim nos() As Integer ReDim nos(1 To AntalNos, 1 To 1) As Integer Dim x As Integer Dim InsR As Integer Dim MaxNo As Integer MaxNo = 13000
InsR = LBound(nos, 1)
Do While True ' Trækker et tilfældigt nummer Randomize NO = Int(MaxNo * Rnd + 0.5) ' Hvis NO = 0 If NO = 0 Then GoTo NextNumber End If For x = LBound(nos, 1) To InsR Step 1 ' Tjekker for dubletter If InsR > 1 Then If NO = nos(x, 1) Then GoTo NextNumber End If End If Next x
nos(InsR, 1) = NO InsR = InsR + 1
' Escape sekvens If InsR = UBound(nos, 1) + 1 Then Exit Do End If NextNumber: Loop With Range(Cells(LBound(nos, 1), 1), Cells(UBound(nos, 1), 1)) .Value = nos() .Sort Range("a1"), xlAscending, , , , , , xlNo End With End Function
Det var lige det jeg manglede til at lave tilfældige tal.
Tak for det !
Så mangler jeg bare en formel/kode der kan sætte/kopiere vore præmier ind i B-rækken tilfældigt. Jeg er klar over at jeg kan kopiere "Duppedit" 200 gange etc etc inden sortering i rækkerne men helt ærligt - det er jeg altså lidt for doven til *S*
Vær i øvrigt lige opmærksom på, om den trækker det højeste tal i dit interval med ud (13000). Kom lige til at tænke på, at det muligvis kunne være et problem.
Du kan principielt bruge samme kode til at generere din præmieliste, hvis du nummererer præmierne, men hvis du ud af 1300 tal skal vælge alle 1300 i tilfældig orden, vil du opleve, at koden bliver ekstremt langsom. Selvom du er doven, vil det nemmeste være, at kopiere "Duppedit" 200 gange inden sortering - eller lave en lille kode, der laver kopieringen for dig :-).
F.eks.
Dim startrække as long dim antal as integer
startrække = 1 antal = 200
For x = startrække to startrække + antal step 1 cells(x,2) = "Duppedit" next x
Den er ikke testet, men det kan du jo selv sidde og rode lidt med. :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.