Suche einen Zufallsgenerator der folgendes kann: (evtl Excel)

...komplette Frage anzeigen

1 Antwort

Hab Dir folgendes Makro dafür geschrieben. Musst auf der Blattfahne mit Rechtsklick Kontextmenü öffnen, auf Code anzeigen klicken, im VBA-Editor Einfügen Modul und dann das da reinkopieren (ich empfehle zwischendurch ein ausreichend breites xl-Textfeld zu benutzen, dann hast Dus schon mal in der Datei!).
Bei mir tuts (xl2000), aber musst selber nochmals überprüfen.
Und vorsicht: Das Makro überschreibt alles, was in C1:C50 des aktiven Blattes steht!

Wichtig: Die Adressen beziehen sich auf das aktive Blatt und sind für C1:C50 geschrieben. Wenns woanders stattfinden soll oder sich der Umfang der Liste bzw die 10 Länder oder die 32 Zufallszahlen ändern, musst Du ALLE Adressen und die Zufallszahlformel anpassen!
(die zehn Länder, die die Zufallszahl bekommen MÜSSEN, stellst Du nach oben, kannst ja hinterher wieder rücksortieren. Im Zweifelsfall dafür vorher eine Nummerierungsspalte anlegen!) Viel Erfolg!

Sub ZufallszahlLaenderliste() '32 Zahlen auf 50 Länder verteilen, 10 MÜSSEN Zahl bekommen, 18 bleiben übrig

Dim c, Cell, W, z, Zelle, Zahl '

'säubern:

Range(Cells(1, 3), Cells(50, 3)).ClearContents 'Zeile 1, Spalte 3 = C; Zeile 50, Spalte 3 = C

'äussere Schleife setzt ZufallsZahlen 1-32 nach Zelle 1-10:

For Each c In Range(Cells(1, 3), Cells(10, 3)) 'Zeile 1, Spalte 3 = C; Zeile 10, Spalte 3 = C

neueZahl:

Zahl = Int(Rnd() * 32 + 1) '< +1 verhindert Null, da Ganzzahl immer niedriger

'innere Schleife prüft, ob schon vorhanden

For Each Cell In Range(Cells(1, 3), Cells(10, 3)) '<muss andere "Steuervariable als c sein!

If Cell.Value = Zahl Then GoTo neueZahl

Next

c.Value = Zahl

Next

'äussere Schleife setzt weitere ZufallsZahlen 1-50 nach Zelle C11:C50:

For Each z In Range(Cells(11, 3), Cells(50, 3)) '<vorsichtshalber neue "Steuervariable

weitereZahl:

Zahl = Int(Rnd() * 50 + 1) '< +1 verhindert Null

'innere Schleife prüft weiterhin in ALLEN Zellen C1:C50, ob schon vorhanden

For Each Zelle In Range(Cells(1, 3), Cells(50, 3)) '<vorsichtshalber nochmals neue "Steuervariable

If Zelle.Value = Zahl Then GoTo weitereZahl

Next

z.Value = Zahl

Next

'Beseitigung unzulässig hohe Zahlen => Länder ohne Zahl

For Each W In Range(Cells(11, 3), Cells(50, 3)) '<vorsichtshalber nochmals neue "Steuervariable

If W.Value > 32 Then W.Value = "" '< löscht Zahlen über 32 wieder

Next

End Sub

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
04.10.2011, 15:27

vielleicht hab ich das auch falsch interpretiert: Sind die zuzulosenden Zahlen schon vorgegeben? Ich hab sie als Zufallszahlen 1..32 generiert. Wenn Du es anders brauchst, geht das auch - sowohl im Makro, oder Du verweist mit der Zufallszahlenliste auf die Zeilen(1:32), in deren Zellen irgendwo die Liste der vorgegebenen Zahlen steht. Wenn nicht in Zeile 1:32, dann eben in Zeile (1+Konstante):(32+Konstante)

0

Was möchtest Du wissen?