• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Random nummer

Status
Niet open voor verdere reacties.

H4rdje

Gebruiker
Lid geworden
21 feb 2005
Berichten
79
Kan iemand me helpen met het volgende :

Ik heb 16 cellen met verschillende waarden
(A1=waarde 1, A2=waarde 2, enz...). Ik zou graag dmv een button of iets dergelijks een random waarde (tussen 1 en 16) naast elk van de waarden in kolom A te zien krijgen. Hoe pak ik dit aan?
 
INT(RAND()*16)+1 of zoiets

Als je de NL Excel hebt moet je de functies maar even vertalen.... zal wel RANDOM() en GEHEEL() zijn.
 
Nee, de functie ASELECT geeft een random waarde groter dan nul en kleiner dan 1.
Bijkomend probleem is dat elke random waarde maar 1 keer mag toegekend worden. Wanneer cel B1 waarde 6 krijgt, mag deze niet meer aan een andere cel toegekend worden. :rolleyes:
 
Met de macro,

Sub Random()

Dim getal As Single

Randomize

getal = Int((16 * Rnd) + 1)

Range("F5").Select
ActiveCell.FormulaR1C1 = getal

End Sub

Wordt een waarde tussen de 1 en 16 in cel F5 gezet.
In de bijlage staat dit voorbeeld op tabblad 1 en op tabblad 2 een voorbeeld waar de cellen A1 t/m A16 gevuld worden met willekeurige waarden.

Gebruikte macro is;

Sub Random2()

Dim getal As Single

For t = 1 To 16
Randomize
getal = Int((16 * Rnd) + 1)
Range("A" & t).Select
ActiveCell.FormulaR1C1 = getal
Next t

End Sub
 

Bijlagen

Hoi H4rdje,

Het is eigenlijk simpeler dan je denkt, het kan met Aselect() en Aantal.als():

In B1 zet je =aselect()
In C1 zet je =aantal.als($B$1:$B$16;"<="&$B1)

In volstrekt willekeurige volgorde staan de getallen 1 t/m 16 nu onder elkaar, de kans op dubbele waarden is klein. Ook dat is uit te sluiten door het rijnummer te verwerken in Aselect():
B1: =Afronden(Aselect();4)+Rij()/1000000

Jeroen
 
Jzeedijk, kan je z'n formule ook koppelen aan de button zo als H4rtje vroeg om de waarden te resetten?

Mooie formule overigens, kan je er een korte toelichting bij geven?
 
Hoi Withaar & H4rdje,

Voor degene die mij al langer kennen, ik houd niet zo van knoppen :rolleyes:

Andere oplossing:
In B2 maken we de achtergrondkleur grijs, een mooi randje er om heen en de tekst "dobbelen" er in

Dat lijkt op een knop, maar is het niet.

Ga naar de programma-editor zetten we de onderstaande code (Alt & F11 of rechtermuis klikken op tabblad en programmacode weergeven kiezen):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$2" Then
For i = 11 To 26
Cells(i, 2) = Rnd()
Next i
End If
End Sub

In B11:B26 zetten we de formule
=aantal.als($A$11:$A$26;"<="&$A11)

En voila.

Aselect genereerd een willekeurig getal (15 decimalen achter de komma, de kans op twee gelijke getallen is ongeveer gelijk aan het twee maal winnen van de staatsloterij met slechts 1 lot per keer).
Aantal.als telt het aantal getallen in het bereik A11:A26 dat kleiner is dan het getal in A11. Het kleinste getal krijgt dus 1, want er is slechts 1 getal gelijk aan deze waarde.

Jeroen
 
Laatst bewerkt:
Bedankt voor de uitleg, ik had al het vermoeden dat ik hiervan nog iets kon leren.

Alleen snap ik nog niet helemaal waarom B2 opeens als een button werkt.

Ik dacht dat
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
alleen maar reageerd op het wijzigen van de waarde in de target cel, wat bv een probleem is als je alleen maar de kleur van de target cel veranderd maar niet de waarde, je macro met deze code er in werkt dan niet...
Maar hiet start hij zelfs zonder ook maar iets te wijzigen, er op gaan staan is al voldoende! :8-0:
 
Hoi Withaar,

De sub in VBA werken op zogenaamde Events, gebeurtenissen, Change (verandering) is daar 1 van, maar dus ook SelectionChange (verandering van richting). Sta je eenmaal in B2 en je verandert de waarde van B2, dan zul je zien dat er niets gebeurt. Op mijn vorige computer kreeg ik na verloop van tijd steeds de melding dat er onvoldoende systeembronnen waren, waarna Excel vastliep en mijn werk van de tijd ervoor weg was. Daar wordt je niet vrolijk van en zeker niet als er een deadline is die gehaald moet worden. Bovendien was ik het beu om steeds van toetsenbord naar muis te gaan en weer terug. Met mijn 'knop' heb je de keus of toetsenbord of muis.

Alle andere Events voor een Worksheet:
- Activate (Actief worden van het werkblad, bijv. van Blad2 naar Blad1). Vooral handig als je grote berekeningen uitvoert waarbij je niet vertraagt wilt worden door de berekeningen op blad2
- BeforeDoubleClick (Macro wordt gestart met dubbelklikken voor de hetgeen dat gebeurt door het dubbelklikken)
- BeforeRightClick (Macro start voor dat de gebeurtenis van de rechtermuisklik wordt uitgevoerd, vaak het menu van de cel of het werkblad)
- Calculate (Iedere keer als het werkblad opnieuw berekend wordt, start de macro)
- Deactivate (Doet iets als van ban Blad1 naar Blad2 gaat, bijvoorbeeld automatisch berekenen uitschakelen op het werkblad)
- Followhyperlink (Naast de hyperlink wordt de macro gestart).

Jeroen
 
Bedankt voor de hulp!
Zal het ff uitproberen, i'll get back 2 u
 
Geplaatst door jzeedijk
Hoi H4rdje,

Het is eigenlijk simpeler dan je denkt, het kan met Aselect() en Aantal.als():

In B1 zet je =aselect()
In C1 zet je =aantal.als($B$1:$B$16;"<="&$B1)

In volstrekt willekeurige volgorde staan de getallen 1 t/m 16 nu onder elkaar, de kans op dubbele waarden is klein. Ook dat is uit te sluiten door het rijnummer te verwerken in Aselect():
B1: =Afronden(Aselect();4)+Rij()/1000000

Jeroen


Mooi, heb dit even getest en het werkt prima!
Alleen, er verschijnt nu ook de waarde 0 (nul), terwijl enkel de waarden 1 t.e.m. 16 mogen verschijnen. Ideeen?


;)
 
Hoi H4rdje,

Deze formule gebruikt in C1:
=aantal.als($B$1:$B$16;"<="&$B1)
en toch een 0????

Het enige dat ik kan bedenken is dat je de formule gebruikt hebt voor $B17, een cel buiten het bereik $B$1:$B$16. Binnen het bereik kan er geen getal lager zijn dan de laagste waarde uit het bereik.

Of Bill Gates heeft een foutje gemaakt.

Jeroen
 
Sorry Jeroen, ben iets te snel geweest in mijn opmerking. Zat een foutje in 1 van de cellen (copy/paste???)
Dus da's opgelost.
Maar ik krijg tochaf en toe 2 identieke (gehele) getallen.
 
Hoi H4rdje,

Die kans moet eigenlijk te klein zijn om voor te komen, daar Aselect op 15 cijfers achter de komma werkt. Maar toch komt het blijkbaar voor!

Passen we de formule ietsjes aan:
=aantal.als($B$1:$B$16;"<"&$B1) +aantal.als($B$1:$B1;$B1)

Jeroen
 
H4rdje,

Met de formule van Jeroen mag het eigenlijk niet mis gaan.

De macro's in de bijlage beloven hetzelfde.
nl. Geen Dubbelen.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan