Sammlung | Services | Trainings | xls-Literatur | xls-Links | Anzeigen | Autor + Kontakt | Gästebuch |
Sammlung ==> #21 VBA: RANDOM-Tool VBA: RANDOM-Tool: Gastbeitrag In speziellen Situationen benötigt man eine Reihe von Zufallszahlen. Die Generierung von Zufallszahlen über Excelfunktionen hat gewisse Schwächen. Dagegen ist es mit relativ wenig VBA-Code möglich, eine beliebige Anzahl von Zufallszahlen zu erhalten, die für individuelle Zwecke verwendet werden können. Gastautor Hans Bon stellt excelfunktionen.de ein entsprechendes Tool zur Verfügung. Der VBA Code ist transparent und das File stellen wir als Download zur Verfügung. Vorbemerkung: RANDOM-Verfahren bei der Excelfunktion ZUFALLSZAHL() mit entsprechenden Nachteilen Die Excelfunktion =ZUFALLSZAHL wirft eine Zufallszahl aus, die zwischen 0 und 1 liegt. Durch Multiplikation dieser Zahl mit bspw. 10, 100, 1000, 10000 kann die Zahl auf entsprechende Werte über Null hochgesetzt werden. Durch die Funktion RUNDEN können Dezimalstellen abgeschnitten werden. Wenn zum Beispiel in der Zelle A1 die Funktion =ZUFALLSZAHL() einen Wert 0,13707076 zufällig gezogen hätte, kann dieser in der Zelle B1 durch die Funktion =RUNDEN(A1*10000;0) auf die vierstellige Zufallszahl 1371 hochgesetzt werden. Wenn man entsprechend mehrere Zufallszahlen generieren möchte, können die Funktionen in A1 und B1 entsprechend weit nach unten ausgefüllt werden. Die Ergebnisse mehrerer Zufallszahlen müssen auf mögliche Mehfachergebnisse einzelner Werte getestet werden, sofern man den Anspruch in speziellen Situationen hat, dass eine gezogene Zufallzahl nur einmal vorkommen soll. Dies kann mittels ANZAHL-Funktion geschehen. Das Ziehen von Zufallszahlen mittels ZUFALLSZAHL() hat jedoch einen Nachteil: Denn bei jeder erneuten Funktionseingabe an beliebigen Stellen im Excel-Sheet werden die Zufallszahlen durch eine interne Refresh-Aktion immer wieder aktualisiert. Auch beim Abspeichern und Wiederöffnen der Datei sind somit immer wieder neue Werte gezogen - den Effekt kann man auch durch das wiederholte Drücken der F9-Taste nachvollziehen. Diesen Nachteil kann man nur aufheben, in dem die gezogenen Zufallszahlen in die Zwischenablage kopiert werden und an eine beliebige Stelle mittels "Inhalte einfügen" (dort dann nur die Werte einfügen) aus der Zwischenablage in neue Zellen eingefügt werden. Eine Lösung über VBA (Makros) ist hier wesentlich komfortabler - deswegen unser RANDOM-Tool mittels VBA. Eigenschaften des RANDOM-Tools:
Der Code: Sub makro1() ' Zufallszahl ziehen und abgleichen,
damit keine doppelt Range("A1").Activate
' doppelt gezogene Zahlen ermitteln Range("A1").Activate
' F aus der letzten Zelle löschen In diesem Einstellungsbeispiel werden 30 Zufallszahlen gezogen, welche jeweils zwischen 0 und 50 liegen. Dafür werden maximal 45 Ziehversuche zur Verfügung gestellt, dies entspricht einer Art Puffer für maximal 15 doppelt gezogene Werte. An diversen Stellen ist dieser Code schnell anpassbar, die wichtigen Stellen sind folgende: X = 45 ' Anzahl der Maximalversuche Hier muss X immer deutlich größer Y gesetzt werden, der Größenabstand kann reduziert werden, wenn die Zahlenmenge, aus der gezogen wird, relativ groß ist. [a1] = Int((50 * Rnd) + 1) z1 = Int((50 * Rnd) + 1) Hier kann der Zahlenbereich eingestellt werden. Wünscht man bspw. 6stellige Zufallszahlen, so muss der Code wie folgt sein: [a1] = Int((900000 * Rnd) + 99999) z1 = Int((99999 * Rnd) + 99999)
Wir stellen Ihnen das Sheet als ZIP-File Zahl2.zip [9 kb] zum herunterladen hier zur Verfügung!
Für Rückfragen steht Ihnen der Gastautor gerne zur Verfügung. Senden Sie eine Mail an uns, wie bemühen uns dann um Hilfestellung. Vielen Dank an Hans Bon. Er ist unter anderem auch Autor des Programms Einstufungstest - basierend auf MS-Excel von Basel & Bon. excelfunktionen.de | Okt. 2003 |
www.excelfunktionen.de| Impressum | Besucher online: