15. december 2003 - 12:48Der er
18 kommentarer og 2 løsninger
Tal til banko
Hvis jeg nu skal finde nogle tal til en bankospil. Så skal jeg finde 20 tilfældige tal imellem 1 og 90. Jeg vil gerne have de 20 tal til at stå under hinanden, for eksempel i kolonne a fra celle a1-a20. Der må selvfølgelig ikke være gengangere. Kan det lade sig gøre.
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
Du kan generere tilfældige tal med SLUMP(). Den genererer tilfældige tal mellem 0 og 1; men med lidt yderligere beregninger bør funktionen kunne anvendes.
Prøv med: =HELTAL(SLUMP()*(90-1)+1) hvor 1 står for laveste værdi, 90 højeste værdi. Sæt beregningen til manuel, da tallene ellers vil skifte ved hver genberegning.
Problemet med slump() er at den ikke garanterer at det samme tal ikke vælges to gange og det går jo ikke i Bingo :-)
En alternativ løsning er at lave to kolonner. I A-kolonnen har du Formlen =Slump() i cellerne A1 til A90. I B-kolonnen har du så tallene 1 til 90. Nu sorter du de to kolonner med udgangspunkt i A-kolonnen. Så har du alel tal mellem 1 og 90 fordelt i tilfædlig orden. De 20 øverste tal kan så være dem, du skal bruge.
bak->Tilføj et ark2, med tallene fra 1-90 placeret i 10 kolonner og 9 rækker.
Suppler din kode med nedenstående. Så har du også et "regnskabsark", hvor du kan se(i nummerorden), hvilke tal, der er udtrukket, når der siges bingo :-)
Public x As Variant Sub nyt_spil() Range("b7") = 0 Range("e2:e100").ClearContents Range("b6").ClearContents Sheets("Ark2").Range("A1:J9").ClearFormats End Sub
Sub nyt_tal() Start: If Range("b7") = Range("b4") Then Exit Sub Mindste = Range("B2") Storste = Range("B3") x = Int((Rnd() * (Storste - Mindste + 1) + Mindste)) For Each c In Range("E2:E100") If c = x Then GoTo Start Next Range("B6").Value = x Range("b7").Value = Range("b7").Value + 1 Range("e" & Range("B7").Value + 1) = Range("b6").Value Call FindMarker End Sub
Sub FindMarker() Debug.Print x Sheets("ark2").Activate Range("a1").Activate Cells.Find(What:=x, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False).Activate Selection.Font.ColorIndex = 3 Selection.Font.Bold = True Sheets("ark1").Activate End Sub
Under det store tal på ark1 skrives fra 1-90 placeret i 10 kolonner og 9 rækker maker dem alle og navngiv Området 'Plade'
Public x As Variant Sub nyt_spil() Range("b7") = 0 Range("e2:e100").ClearContents Range("b6").ClearContents Range("Plade").ClearFormats End Sub
Sub nyt_tal() Start: If Range("b7") = Range("b4") Then Exit Sub Mindste = Range("B2") Storste = Range("B3") x = Int((Rnd() * (Storste - Mindste + 1) + Mindste)) For Each c In Range("E2:E100") If c = x Then GoTo Start Next Range("B6").Value = x Range("b7").Value = Range("b7").Value + 1 Range("e" & Range("B7").Value + 1) = Range("b6").Value Call FindMarker End Sub
Sub FindMarker() For Each c In Range("Plade") If c = x Then c.Font.ColorIndex = 3 c.Font.Bold = True Exit Sub End If Next End Sub
Hvis man nu gerne vil ændre på formatet på området "plade", således at tallene er større, hvordan kan man det ? Når man trykker nyt spil ændre den formatet tilbage til det "gamle" ?
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.