Zufallszahlen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

lieselotte
Beiträge: 1
Registriert: Fr, 28.05.2010 20:09

Zufallszahlen

Beitrag von lieselotte »

Hallo
Ich brauche bitte dringend Hilfe. Ich kenne mich leider mit Tabellenkalkulation nicht aus.
Folgendes Problem
Bei D1 bis D6 möchte ich Zufallszahlen im Bereich ( 1-50 ) haben , wobei die Zahlen aber nicht doppelt vorkommen dürfen.
Ich würde mich freuen wenn mir jemand helfen könnte.
Gruß
Lieselotte
echo
*******
Beiträge: 1006
Registriert: Fr, 14.11.2008 15:27
Wohnort: BRA - Nds

Re: Zufallszahlen

Beitrag von echo »

Hallo,
mit oder ohne Nachkommastellen :D

OK, =zufallszahl() ergibt eine zufällige Zahl zwischen 0 und 1
Multipliziert mit 49 >> Zufallszahl zwischen 0 und 49
Plus 1 Zufallszahl zwischen 1 und 50

=Ganzzahl(zufallszahl()*49+1)
ohne Nachkommastellen

Gruß Holger
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: Zufallszahlen

Beitrag von bst »

Auch Hallo,

mit Formeln siehe vielleicht mal hier: http://www.excelformeln.de/formeln.html?welcher=152

mit Code sollte so etwas funktionieren.

cu, Bernd
--

Code: Alles auswählen

REM  *****  BASIC  *****

Sub x()
	const n = 50
	const m = 6
	dim i as integer, j as integer
	dim ar(1 to n) as integer
	dim intZufall as integer
	dim ActiveSheet as object
	
	ActiveSheet = ThisComponent.getCurrentController.getActiveSheet
	for i = 1 to n
		ar(i) = i
	next
	
	i = n
	for j = 0 to m-1
		intZufall = int(i * rnd() + 1)
		ActiveSheet.getCellByPosition(3, j).Value = ar(intZufall)
		ar(intZufall) = ar(i)
		i = i - 1
	next
End Sub
bauer-ewert
***
Beiträge: 89
Registriert: Fr, 09.10.2009 09:35

Re: Zufallszahlen

Beitrag von bauer-ewert »

ciao zusammen. Ich schneie hier mal rein, nicht weil ich Ahnung hätte, aber weil es mich interessiert.

@echo: schöne einfache Lösung. Nur die Wiederholung einer bereits generierten Zahl wird mit der Formel nicht verhindert. Ich habe mit deiner Formel aber eine Tabelle aufgebaut, die eine vorher erstellte Liste mit ganzen Zahlen von 1 bis 50 mit Hilfe von generierten Zufallszahlen in der benachbarten Spalte sortiert. Dadurch werden die 50 verfügbaren Zahlen zufällig angeordnet. Durch eine einfache Formel in den Zielzellen D1 bis D6 lassen sich die ersten 6 Zahlen der zufällig sortierten Spalte übernehmen. Das Sortieren selbst geht mit einfachem Makro, dem ich hier das Kürzel ALT+1 zugewiesen habe. Kurios dabei: beim Sortiervorgang werden schon wieder neue Zufallszahlen gebildet so dass man die Sortierung nicht mehr sieht.

@lieselotte: wäre diese Lösung brauchbar?

Bernhard
Dateianhänge
Zufall.ods
(8.93 KiB) 341-mal heruntergeladen
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Zufallszahlen

Beitrag von balu »

Hallo Leute,

@Bernhard
Ohne Makro funktioniert deine Datei wohl nicht so wie Du es beschrieben hast.


@Bernd
Das Makro funktioniert gut.
Wenn ich doch nur mehr Ahnung von Makros hätte :?.


@Lieselotte
Darf es auch meine primitive Formellösung sein?
Als erstes kommt in D1

Code: Alles auswählen

=ZUFALLSBEREICH(1;50)
rein, welche deine Anforderung
Zufallszahlen im Bereich ( 1-50 )
erfüllt.

Als nächstes komt dann in D2 die Formel rein, die verhindert das es in den nächsten Zellen zu doppelten Zahlen kommt.
=WENN(ZÄHLENWENN(D$1:D1;ZUFALLSBEREICH(1;50));ZUFALLSBEREICH(1;50);ZUFALLSBEREICH(1;50))
Diese Formel dann bis nach D6 runterziehen.


Da Du wenig Erfahrung mit Tabellenkalkulation hast, hier eine kurze Erkläruhng der längeren Formel.
=WENN(ZÄHLENWENN(D$1:D1;ZUFALLSBEREICH(1;50)) - {also der Blaue Bereich} Als erstes vergleicht Zählenwenn die theoretisch gezogene Zufallszahl im Bereich D$1:D1, und wenn sie schon vorhanden ist wird mit dem Roten Bereich weitergemacht, also eine neue Zufallszahl generiert und ausgegeben.
Sollte der Blaue Bereich aber nicht zutreffen, dann wird mit dem Grünen Bereich weitergemacht, also wiederum eine neue Zufallszahl generiert und ausgegeben.

Durch das runterziehen (kopieren) bis nach D6 passt sich der Zellbereich für ZÄHLENWENN automatisch an, so dass dann in D6 D$1:D5 steht.

Wie gesagt, sie ist primitiv, aber sie funktioniert :D.
Ich möchte fast dafür Wetten das Karolus eine elegantere Lösung hat :wink:.



Gruß
balu
Dateianhänge
Zufallsbereich.ods
(7.28 KiB) 247-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: Zufallszahlen

Beitrag von Karolus »

Hallo
Wie gesagt, sie ist primitiv, aber sie funktioniert
Nee, tut mir leid die funktioniert genauso gut oder schlecht ( eben zufällig wiederholungsfrei ) wie nur :
=ZUFALLSBEREICH(1,50)

Eine elegantere Lösung dazu hab ich nicht, aber wir hatten hier schon ein paar mal das Thema Lottozahlen...

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
bauer-ewert
***
Beiträge: 89
Registriert: Fr, 09.10.2009 09:35

Re: Zufallszahlen

Beitrag von bauer-ewert »

Guten Abend nochmal.

@balu

ach so, das Makro kommt beim upload nicht mit? Okay, ich habe lediglich den Vorgang "Daten sortieren nach Spalte" aufgezeichnet, vor dem händischen Schreiben von Makros habe ich noch grossen Respekt... "Primitiv" finde ich deine Formellösung überhaupt nicht, eher kurz und würzig. Aber eben, es wird wohl nur nach einem "Fehlversuch" neu gezogen. Wenn die neu gezogene Zahl auch doppelt ist, bleibt sie stehen.

Code: Alles auswählen

sub zufall
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$H$1:$I$50"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(6) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = false
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "IncludeAttribs"
args2(3).Value = true
args2(4).Name = "UserDefIndex"
args2(4).Value = 0
args2(5).Name = "Col1"
args2(5).Value = 8
args2(6).Name = "Ascending1"
args2(6).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())


end sub
@karolus

Spricht denn etwas dagegen, die Lottozahlen so zu ziehen, wie im wirklichen Leben: die Kugeln, sind in Anzahl und Werten exakt vorgegeben und die Manipulation besteht lediglich in einer zufälligen Sortierung und dem Abgreifen der ersten n Zahlen?

Grüsse

Bernhard
Antworten