einmalige Zufallswerte

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: einmalige Zufallswerte

von Wutzebub » Sa, 11.11.2006 19:26

:D

von Wutzebub » Sa, 04.11.2006 16:19

DAS ist es. Super. Funktioniert ohne Probleme. Vielen Dank.

von Karolus » Sa, 04.11.2006 15:05

Hallo Wutzebub

Ich hab dir den Code jetzt noch mal umgeschrieben in eine Sub, dh. du kannst sie direkt über eine Schaltfläche aufrufen,
Die Zahlen werden ab der aktuell selektierten Zelle untereinander eingetragen, in den Zellen rechts daneben werden dann zufällige Zellinhalte aus Spalte A ausgegeben.

Die Anzahl der "Lottozahlen" und die Einstellungen des Auswahlbereiches kannst du direkt in den entsprechenden Zeilen am Anfang des Codes verändern.
Falls du nur Zahlen oder nur Namen möchtest, kommentier die nichtgewünschte Ausgabe einfach aus.

Code: Alles auswählen

 sub Lottozahlen
	'"x" aus dem Zahlenbereich "von" "bis"
	x = 11       '← hier eigene Werte eintragen
	von = 1       '← hier eigene Werte eintragen
	bis = 180     '← hier eigene Werte eintragen
	Dim zahlen(x-1) As Integer, i As Integer, j As Integer
	Dim gefunden As Boolean, msg As Variant
	if x > bis - von +1 then
		msgbox("Fehler : Anzahl der Lottozahlen ist größer als Auswahlbereich",3)
		exit sub
	end if
odoc = thisComponent
	mysheet=odoc.currentcontroller.activesheet
	Zellaktuell=odoc.getCurrentSelection().getCellAddress()
	oRow=Zellaktuell.Row
	oColumn=Zellaktuell.column
	Zellaktuell=mysheet.getCellByPosition(ocolumn,orow)
	nrow = orow + i
	Zellziel=mysheet.getCellByPosition(ocolumn,nrow)
	zielname=mysheet.getCellByPosition(ocolumn+1,nrow)
	i = 0
	zahlen(0) = Int((bis - von+1) * Rnd) + von
	msg = zahlen (0)
	'Nicht gewünschte Ausgabe auskommentieren
	Zellziel.value = msg  'Zahlenausgabe in Spalte ocolumn
	zielname.formula = "=A"&msg 'Zufällige Inhalte aus Spalte A in Spalte ocolumn+1
Do
	i = i + 1
	nrow = orow + i
	Zellziel=mysheet.getCellByPosition(ocolumn,nrow)
	zielname=mysheet.getCellByPosition(ocolumn+1,nrow)
	gefunden = False
	zahlen (i) = Int((bis - von+1) * Rnd) + von
	For j = 0 To i - 1
		If zahlen (j) = zahlen (i) Then
			i = i - 1
			gefunden = True
			Exit For
		End If
	Next j
	If Not gefunden Then msg = zahlen (i)
		'Nicht gewünschte Ausgabe auskommentieren
		Zellziel.value = msg    'Zahlenausgabe in Spalte ocolumn
		zielname.formula = "=A"& msg   'Zufällige Inhalte aus Spalte A in Spalte ocolumn+1
Loop Until i = x-1
End sub 
Gruß Karo

von Wutzebub » Sa, 04.11.2006 06:27

Noch was ist mir jetzt aufgefallen. Warum kann ich die Werte, welche untereinander stehen nicht in die Zwischenablage kopieren?



Edit: Dieser Punkt hat sich erledigt. Hab nen Fehler gemacht.

von Wutzebub » Sa, 04.11.2006 06:11

Beim Starten der Datei bekomme ich folgende Fehlermeldung:
Basic Laufzeitfehler
Argument ist nicht optional

Dann wird der Editor mit folgender Meldung eingeblendet:
Dim zahlen(x-1) As Integer, i As Integer, j As Integer

Was mache ich da falsch?

von Karolus » Fr, 03.11.2006 19:38

Hallo Wutzebub

Bei dir ging es doch ursprünglich um die Zufallsnamen?-
Die erhälst nach wie vor mit der Formel :

=INDIREKT("A"&MTRANS(C1:M1))
statt 'C1:M1' gibst du natürlich den Zellbereich ein der von ZAHLENLOTTO(...)
gefüllt wird.

Falls du jetzt einfach Zufallszahlen in einer Zelle haben möchtest ?-
kommentier einfach mal die drittletzte Zeile im Code mit einem ' Hochkomma aus:
'msg = split(msg,chr(44))-
falls du eine Ausgabe in einem Dialogfenster Möchtest ?- entferne das ' Hochkomma vor der 4-letzten Zeile :
'msgbox(msg)
Gruß Karo

von Wutzebub » Fr, 03.11.2006 18:47

Das mit den Werten funktioniert. Jedoch geht jetzt die Neuberechnung nicht mehr (Basic Laufzeitfehler!!!). Außerdem stehen jetzt alle Zufallswerte nebeneinander in verschiedenen Zellen und nicht mehr in einer Zelle. Das heißt, mein Problem von ganz oben ist wieder da.
Sorry, aber ich habe 0 Ahnung davon.

von Karolus » Fr, 03.11.2006 17:17

Hallo Kewi
mal was anderes:
kann ich in deine funktion auch einen wert aus einer zelle einlesen der dann die anzahl der zufallszahlen bestimmt ?
Schau dir doch mal meinen Code von heute 10Uhr19 an, ist schon eingebaut.
Aufruf mit :

=ZAHLENLOTTO(15;4;184)
Anstelle der Zahlen kannst du wie bei jeder anderen Funktion Zelldressen mit entsprechenden Zahlenwerten eintragen.

Gruß Karo

von kewi » Fr, 03.11.2006 14:08

Hi karo,

mal was anderes:
kann ich in deine funktion auch einen wert aus einer zelle einlesen der dann die anzahl der zufallszahlen bestimmt ?

also sowas in der art:
der wert steht in E5

Code: Alles auswählen

function Zahlenlotto() ' 15 aus 184, beginn ab 4
  Dim zahlen("E5") As Integer, i As Integer, j As Integer
  Dim gefunden As Boolean, msg As Variant

      i = 1
      zahlen(1) = Int("E5" * Rnd) + 4
      msg = zahlen (1)
      Do
      i = i + 1
      gefunden = Fals
      ....
mfg kewi

von Karolus » Fr, 03.11.2006 10:19

Hallo
@ Kewi
Dein Code gilt für "16 aus 183 , Beginn bei 3"

1. Wie bekomme ich hin, dass der Zufallsgenerator erst bei 4 anfängt zu zählen? D.h. die 180 Werte sollen bei 4 anfangen, und bei 184 enden.
2. Wenn ich einmal 15 Zufallszahlen benötige, was muss ich dann tun?
Nimm folgenden Code:

Code: Alles auswählen

REM  *****  BASIC  *****
function Zahlenlotto(x,von,bis) '"x" aus dem Zahlenbereich "von" "bis" 

Dim zahlen(x-1) As Integer, i As Integer, j As Integer
Dim gefunden As Boolean, msg As Variant

i = 0
zahlen(0) = Int((bis - von) * Rnd) + 1
msg = zahlen (0)
Do
i = i + 1
gefunden = False
zahlen (i) = Int((bis - von) * Rnd) + 1
For j = 0 To i - 1
If zahlen (j) = zahlen (i) Then
i = i - 1
gefunden = True
Exit For
End If
Next j
If Not gefunden Then msg = msg & "," & zahlen (i)
Loop Until i = x-1
'msgbox(msg)
msg = split(msg,chr(44))
Zahlenlotto = msg
End function 
und rufe die Funktion mit deinen Gewünschten Werten auf :

=ZAHLENLOTTO(15;4;184)

Gruß Karo
Der Informatiker steht am Bahnsteig und zählt seine Koffer :
0 , 1 , 2....."grübel"? "Mist, wo ist der dritte Koffer"

von kewi » Fr, 03.11.2006 09:32

Hi Wutzebub,

ich hab hier das Zahlenlotto für dich verändert in dem ich 15 zufallszahlen aus dem Zahlenbereich von 4 bis 184 ausgebe:

Code: Alles auswählen

function Zahlenlotto() ' 15 aus 184, beginn ab 4
  Dim zahlen(15) As Integer, i As Integer, j As Integer
  Dim gefunden As Boolean, msg As Variant

		i = 1
		zahlen(1) = Int(180 * Rnd) + 4
		msg = zahlen (1)
		Do
		i = i + 1
		gefunden = False
		zahlen (i) = Int(180 * Rnd) + 4
		For j = 0 To i - 1
		If zahlen (j) = zahlen (i) Then
		i = i - 1
		gefunden = True
		Exit For
		End If
		Next j
		If Not gefunden Then msg = msg & "," & zahlen (i)
		Loop Until i = 15
		msg = split(msg,chr(44))
		Zahlenlotto = msg
End function
müsste so funktionieren, hoffe es hilft dir weiter..

mfg kewi

von Wutzebub » Fr, 03.11.2006 06:50

Hab leider eine neue Problemserie.

1. Wie bekomme ich hin, dass der Zufallsgenerator erst bei 4 anfängt zu zählen? D.h. die 180 Werte sollen bei 4 anfangen, und bei 184 enden.

2. Wenn ich einmal 15 Zufallszahlen benötige, was muss ich dann tun?

von kewi » Do, 12.10.2006 09:20

hi Karolus,

vielen dank, klappt echt sehr gut !
danke, danke, danke...

gibt es eigentlich eine möglichkeit das die ausgewählten namen in der Liste automatisch markiert werden ?

mfg Kewi

von Karolus » Do, 12.10.2006 00:25

Hallo Kewi

Ich hab den Code oben inzwischen nochmal geändert, du brauchst in der Tabelle nur noch zwei Formeln zb in C1 :
=ZAHLENLOTTO()
! wichtig als Matrixformel mit [strg+shift+enter]abschliessen !
und dann wo du möchtest mit 10 leeren Zellen unterhalb :
=INDIREKT("A"&MTRANS(C1:M1))

ebenfalls als Matrixformel abschliessen

Gruß Karo

von kewi » Mi, 11.10.2006 16:33

genau das problem wie am anfang beschrieben hab ich auch, allerdings bekomme ich bei der Zeile:

=FINDEN(",";C$1;D1+1)

und

=INDIREKT("A"&WERT(TEIL(C$1;D1+1;D2-D1-1)))

die meldung: #WERT!

sonst hab ich alles wie oben erklärt gemacht...
falls euch was einfällt, lasst es mich wissen

mfg kewi der n00b

Nach oben