Discussion:
Zufallszahl in VBA , Rnd Randomize
(zu alt für eine Antwort)
Frank Lauter
2004-11-20 16:19:31 UTC
Permalink
Hallo NG!

Ich möchte eine Funktion in VBA schreiben. Dazu benötige ich eine
Zufallszahl. Leider existiert die Funktion Zufallszahl ( Rand ) nicht in
VBA, denn das wäre genau, was ich benötige.

Bisher habe ich probiert, die Funktion Rnd zu verwenden, und damit diese
jedes Mal einen anderen Wert liefern kann, die Funktion Randomize vorher
aufgerufen. Verkürzt sieht das so aus:

Public Function Zufall
Randomize
Zufall = Rnd
End Function

Die selbst geschriebene Funktion liefert auch den gewünschten Wert, aber
dieser wird nicht neu berechnet, wenn das Blatt neu berechnet wird. Wie
erreiche ich, dass die oben verkürzt dargestellte Funktion sich so verhält
wie die Excel-Funktion Zufallszahl?

Vielen Dank für eure Hilfe im Voraus.

Freundliche Grüße

Frank
Jean Ruch
2004-11-20 16:40:55 UTC
Permalink
Post by Frank Lauter
Hallo NG!
Ich möchte eine Funktion in VBA schreiben. Dazu benötige ich eine
Zufallszahl. Leider existiert die Funktion Zufallszahl ( Rand ) nicht in
VBA, denn das wäre genau, was ich benötige.
Bisher habe ich probiert, die Funktion Rnd zu verwenden, und damit diese
jedes Mal einen anderen Wert liefern kann, die Funktion Randomize vorher
Public Function Zufall
Randomize
Zufall = Rnd
End Function
Die selbst geschriebene Funktion liefert auch den gewünschten Wert, aber
dieser wird nicht neu berechnet, wenn das Blatt neu berechnet wird. Wie
erreiche ich, dass die oben verkürzt dargestellte Funktion sich so verhält
wie die Excel-Funktion Zufallszahl?
Vielen Dank für eure Hilfe im Voraus.
Freundliche Grüße
Frank
Hallo Frank,

Kannst Du mit Folgendem was anfangen ?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Range("A1").FormulaLocal = "=Zufallszahl()"
End Sub

Die Zufallszahl in A1 wird so erneuert bei jedem Rechenvorgang im Blatt
wofür der Code Gültigkeit hat.

mit freundlichem Gruß

Jean
Frank Lauter
2004-11-21 08:18:22 UTC
Permalink
Hallo Jean,
Post by Jean Ruch
Kannst Du mit Folgendem was anfangen ?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Range("A1").FormulaLocal = "=Zufallszahl()"
End Sub
Die Zufallszahl in A1 wird so erneuert bei jedem Rechenvorgang im Blatt
Danke für deinen Tipp, aber leider funktioniert das nicht, da ich nicht
weiß,
von welcher Zelle aus meine Funktion aufgerufen wird und mit der
Zufallszahl noch weiter gerechnet werden soll, bevor sie an die Zelle
zurückgegeben wird.

Trotzdem vielen Dank und viele Grüße

Frank
Eberhard Funke
2004-11-20 19:27:55 UTC
Permalink
Hallo Frank,
Post by Frank Lauter
Hallo NG!
Ich möchte eine Funktion in VBA schreiben. Dazu benötige ich eine
Zufallszahl. Leider existiert die Funktion Zufallszahl ( Rand ) nicht in
VBA, denn das wäre genau, was ich benötige.
Bisher habe ich probiert, die Funktion Rnd zu verwenden, und damit diese
jedes Mal einen anderen Wert liefern kann, die Funktion Randomize vorher
Public Function Zufall
Randomize
Zufall = Rnd
End Function
Die selbst geschriebene Funktion liefert auch den gewünschten Wert, aber
dieser wird nicht neu berechnet, wenn das Blatt neu berechnet wird. Wie
erreiche ich, dass die oben verkürzt dargestellte Funktion sich so verhält
wie die Excel-Funktion Zufallszahl?
Vielen Dank für eure Hilfe im Voraus.
Freundliche Grüße
Frank
dazu brauchst Du eine Ereignisprozedur, die immer dann ausgelöst wird,
wenn die Tabelle neu berechnet wird.

Klick mit der rechten Maustaste unten links auf den Reiter der
Tabelle.
Kopier in das sich öffnende Fenster folgenden Code:

Private Sub Worksheet_Calculate()
Dim Zufall As Single
Randomize
Zufall = Rnd
Debug.Print Zufall
End Sub

Kehre mit ALT + F11 wieder in die Tabelle zurück und gib mal ein ppar
Werte ein.
Gehe wieder in den VB-Editor und sieh Dir das Fenster "Direktbereich"
an.
--
Gruß Eberhard
XL 2000
Frank Lauter
2004-11-21 08:18:57 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
dazu brauchst Du eine Ereignisprozedur, die immer dann ausgelöst wird,
wenn die Tabelle neu berechnet wird.
Klick mit der rechten Maustaste unten links auf den Reiter der
Tabelle.
Private Sub Worksheet_Calculate()
Dim Zufall As Single
Randomize
Zufall = Rnd
Debug.Print Zufall
End Sub
Danke für deinen Tipp, aber leider funktioniert das nicht, da ich nicht
weiß,
von welcher Zelle aus meine Funktion aufgerufen wird und das Ergebnis in
die Zelle zurückgegeben werden soll.

Trotzdem vielen Dank und viele Grüße

Frank
Frank Kabel
2004-11-20 19:37:34 UTC
Permalink
Hi
versuche:
Public Function Zufall
application.volatile
Randomize
Zufall = Rnd
End Function

--
Regards
Frank Kabel
Frankfurt, Germany
Post by Frank Lauter
Hallo NG!
Ich möchte eine Funktion in VBA schreiben. Dazu benötige ich eine
Zufallszahl. Leider existiert die Funktion Zufallszahl ( Rand ) nicht in
VBA, denn das wäre genau, was ich benötige.
Bisher habe ich probiert, die Funktion Rnd zu verwenden, und damit diese
jedes Mal einen anderen Wert liefern kann, die Funktion Randomize vorher
Public Function Zufall
Randomize
Zufall = Rnd
End Function
Die selbst geschriebene Funktion liefert auch den gewünschten Wert, aber
dieser wird nicht neu berechnet, wenn das Blatt neu berechnet wird. Wie
erreiche ich, dass die oben verkürzt dargestellte Funktion sich so verhält
wie die Excel-Funktion Zufallszahl?
Vielen Dank für eure Hilfe im Voraus.
Freundliche Grüße
Frank
Frank Lauter
2004-11-21 08:18:34 UTC
Permalink
Hallo Frank!
Post by Frank Lauter
Hi
Public Function Zufall
application.volatile
Randomize
Zufall = Rnd
End Function
Super! Das ist genau das, was ich gesucht habe.

Vielen Dank und viele Grüße

Frank
Frank Kabel
2004-11-21 14:33:31 UTC
Permalink
Post by Frank Lauter
Hallo Frank!
Post by Frank Lauter
Hi
Public Function Zufall
application.volatile
Randomize
Zufall = Rnd
End Function
Super! Das ist genau das, was ich gesucht habe.
Vielen Dank und viele Grüße
Frank
Danke für die Rückmeldung.
Frank

Loading...