[Gelöst]Zufallszahlen sortieren /Macro geht nicht

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

[Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » Sa, 17.11.2018 20:11

Hallo,
Ich möchte eine Tabelle erstellen wo in Spalte A1/ A2 / A3 usw. mit Zufallsbereich Random Zahlen eingetragen werden (kann immer mal mehr oder weniger wwerden).
Dann soll ich Spalte B Namen eingetragen werden und rechts daneben kommen noch andere Felder zum Eintragen und berechnen usw.
Und dann will ich diese ganze Tabelle eigentlich mit Abfallend Sortieren sortieren. Das Problem ist aber das er die Tabelle sortiert mit den Namen
und danach neue Randomnummer verteilt so das die Tabelle wieder nicht paßt. Es ist egeal ob ich in Extras Zellinhalte Automatisch berechnen anmache es funktioniert trotzdem nicht richtig und eigentlich soll er ja schon wenn ich daten zum Rechnen eingebe es berechnen.

Crossposting: [https://www.openoffice-forum.de/viewtop ... =5&t=12539]
Tut mir leid das nicht verlinkt zu haben.
Dateianhänge
SR 5 Muster 2.ods
(19.22 KiB) 18-mal heruntergeladen
Zuletzt geändert von Taghor am Di, 20.11.2018 00:23, insgesamt 4-mal geändert.

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: Zufallszahlen sortieren geht nicht

Beitrag von Taghor » Sa, 17.11.2018 23:04

Ich habe das jetzt mal alles geändert.

Ich habe es mit einem aufgezeichneten Macro versucht leider klappt da irgentwas nicht :-(
Ich hänge mal die Original Datei an mit dem Macro.
Der Plan wäre eigentlich das ich auf den Button Würfeln das Macro Wurfeln ausführe .
Er soll machen.
1) STRG+Shift+F9 ( um eine neue Zufallszahl mit Zufallsbereich zu erzeugen)
2) die Spalte BC löschen
3) Die Spalte BD kopieren
4) Die Spalte BC auswählen
5) In die Spalte BC die daten mit "Inhalte einfügen" die reinen Zahlen einfügen
6) nach vorne wieder hinspringen z.b. B1

habe es versucht aber er kopiert die Daten nicht in BC rein und wenn ich vor Macro ausführung irgentwo ein feld anklicke löscht er nur das Feld.
Habe schon 20 versucht das Macro zu erstellen :-(
Dateianhänge
SR 5 Ini 99% 2.0.ods
(61.55 KiB) 18-mal heruntergeladen

nikki
******
Beiträge: 666
Registriert: Do, 05.03.2015 10:42

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von nikki » So, 18.11.2018 08:29

Gruß

---------------------------------------------------------
Win.10 Prof. 64-bit, AOO 4.1.6, LO 6.0.7 (x64)

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » So, 18.11.2018 10:36

Jo na und ? weil ich drüben keine Antworten bekommen habe. Jetzt habe ich wenigsten eine PN erhalten mein Problem ist zwar immer noch nicht gelöst aber ich hoffe es geht weiter.

Wenn Macros aufzeichnen nicht funktioniert in welcher Programmiersprache muß ich mich einlesen um mein Problem beheben zu können?

F3K Total
********
Beiträge: 3269
Registriert: Mo, 28.02.2011 17:49

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von F3K Total » So, 18.11.2018 11:11

Crossposting
Crossposting ohne Referenz ist unhöflich! Lies dir bitte mal den ersten Link durch.
R

Stephan
********
Beiträge: 10679
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von Stephan » So, 18.11.2018 11:17

Jo na und ?
Hier (und anderswo in Foren) geben dir Freiwillige kostenlose Hilfe. Du solltest diese Hilfe wertschätzen, wozu praktischerseits auch gehört das Du nicht unabhängig voneinander Fragen stellst, sondern wechselseitig darauf hinweist wo überrall Du gefragt hast um allen potentiellenn Antwortern die Chanced zu geben jeweis alle bereits gegebenen Antworten zu kennen.

Wir weisen deshalb in den Allgemeine Hinweise zur Forumsbenutzung darauf hin:

"Crossposting nicht erwünscht, aber toleriert
sog. Crossposting bzw. Multiposting (https://de.wikipedia.org/wiki/Multiposting#Multiposting) ist nicht gerne gesehen, von demjenigen der es verwendet wird aber in jedem Fall erwartet das er das kenntlich macht, also einen LInk auf den jeweils anderen Post setzt, um zu verhindern das an der zweiten Stelle (also in einem anderen Forum) noch über die Lösung nachgedacht wird, wenn diese bereits hier geschrieben ist bzw. auch umgekehrt. "
weil ich drüben keine Antworten bekommen habe
Und wo ist Dein Problem, das trotzdem zu verlinken? Mehr ist hier ja überhaupt nicht verlangt.

Gruß
Stephan

mikeleb
******
Beiträge: 742
Registriert: Fr, 09.12.2011 16:50

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von mikeleb » So, 18.11.2018 12:17

Hallo,
wenn du sowieso mit Makros arbeiten möchtest, dann würde ich die Zufallszahlen auch per Makro erstellen.
Leider sehe ich in deiner Tabelle nicht durch.
1) Wo sollen die Zufallszahlen hin?
2) Welcher Bereich soll sortiert werden?
Aktuell sieht es da sehr durcheinander aus, den z. B. in Spalte A gibt es manchmal Formeln, manchmal nicht. Ist das feststehend? Änderst du das nach Bedarf? ...
Gruß,
mikeleb

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » So, 18.11.2018 13:17

Danke für die Hilfe.
In Spalte BD oder BC soll die Zufalszahl hin und zwar ein 6 Seitiger Würfel.
In Spalte BB steht drinnen wieviel würfel gewürfelt werden. z.b. 3 Stck. dann müßte ich ein ergeniss haben von 3 bis 18
( und nicht einfach die Zufallszahl von 1 bis 6 mal 3 nehmen weil dann würde ja nur als ergebniss 3/6/9/12/15/18 rauskommen.
In spalte A übernehme ich die Zahl von hinten einfach verkette sie noch mit ein paar anderen Zahlen und sortiere dann die Komplette Tabelle
nach spalte A absteigend.
(ersten 3 Spalten bleiben so weil überschriften)

Mir würde auch reichen wenn ich am ende 12 spalten mit jedweils 1w6 Zahlen bekomme da kann ich dann mit Formeln die passenden Anzahl zusammenzählen.
Hatte es ja mit Macro aufzeichnen versucht hinten in BD die Zufallszahlen zu kopieren und dann in BC mit Inhalt einfügen einzufügen.
aber leider klappt das aufgezeichnete Macro auch nicht :-(

Die Tabelle wird an Zeilen noch weiter mit der Zeit sich füllen.
Und Zufallszahl muß öfters erzeugt und kopiert werden bei der benutzung deswegen ist ein jedesmal Kopieren/ Inhalt einfügen usw zu aufwendig/zeitintensiv/ sich drauf zu konzentrieren müssen, weil ja auch noch jedesmal etliche andere Werte geändert werden müssen.


Die Zahl 199 is einfach nur die letzte Zeile der aktiven liste , habe ich deswegen weil formeln bis darein gehen damit sie die formeln automatisch erweitern wenn neue Zeilen eingefügt werden.
Die Zahlen 166 bis 148 sind einfach dafür da das sie immer unterhalb der bespielten liste sind.
Und die Zeilen mit 100 sind dafür da das sie auf reserve sind und ganz unterhalb sind und mich im moment nicht stören.
achja die 101 wird dazwischengesetzt falls einer keine Initiative mehr hat :-)

Code: Alles auswählen

REM Zufallszahl zwischen 1 und 6 erzeugen und in gewünschten Zellbereich schreiben
Sub xZufall
Dim oDoc as Object	' Objektvariable für das aktuelle Dokument
Dim oCC as Object	' Objektvariable für den Currentcotroller. Damit ist z.B. ein Zellzugriff möglich

Dim i as Integer	' Zählervariable vom Datantyp Integer
Dim x as Integer	' Variable zur Aufnahme der Zufallszahl vom Datantyp Integer

' Referenzierungen der Objektvariablen
oDoc=ThisComponent
oCC =oDoc.CurrentController

' getCellByPosition ( [in] long nColumn, [in] long nRow )
REM Zählerschleife über Zelle O4:O16 
	For i = 3 to 201
		' Leere Zellen in Spalte "O" beim Schreibvorgang überspringen
		if i = 200  then goto weiter

		' Zufallszahl erzeugen und in Variable "x" schreiben
				x= Int(6 * Rnd)
		' PRÜFUNG: Ist x = 0?
		' Wenn 20 * Rnd = 0, bzw. kleiner 1 ist, dann 
		' Wird der Zähler (i) um 1 subtrahiert. 
		' Dadurch erhält man dann 8 Zahlen zwischen 1 und 20, und ohne 0
		if x <=1 then 
			i=i-1
			 goto weiter
		End if
		' Wert aus "x" in Zielzelle schreiben
		' Die Adressierung der Zielzelle erfolgt hierdurch:
		' getCellByPosition(14,i)	14 ist die Spalte "O".
		' "i" ist die Zählervariable. Gestartet wird die Zählung bei 3 und endet bei 15
		' Immer daran denken, die Zählung beginnt für Zeilen und Spalte immer bei 0 -->  0,1,2,3...
		' Beispiel: 
		' "A1" = 0,0 --> (Spalte,Zeile)
		' Somit ist "O4" = 14,3 --> (Spalte,Zeile)		
		oCC.ActiveSheet.getCellByPosition(55,i).value= x
weiter:		
	next i

End Sub
hab das schon mal bekommen und hab es angepaßt habe versucht die formel zu erweitern damit ich vieleicht 12 Spalten mit Zufallszahl hinbekomme.
Ich war zu blöd.

Code: Alles auswählen

REM Zufallszahl zwischen 1 und 20 erzeugen und in gewünschten Zellbereich schreiben
Sub xZufall
Dim oDoc as Object	' Objektvariable für das aktuelle Dokument
Dim oCC as Object	' Objektvariable für den Currentcotroller. Damit ist z.B. ein Zellzugriff möglich

Dim i as Integer	' Zählervariable vom Datantyp Integer
Dim x as Integer	' Variable zur Aufnahme der Zufallszahl vom Datantyp Integer
Dim Y as Integer

' Referenzierungen der Objektvariablen
oDoc=ThisComponent
oCC =oDoc.CurrentController

' getCellByPosition ( [in] long nColumn, [in] long nRow )
REM Zählerschleife über Zelle O4:O16 
	For i = 3 to 201
		' Leere Zellen in Spalte "O" beim Schreibvorgang überspringen
		if i = 200 then goto weiter

		' Zufallszahl erzeugen und in Variable "x" schreiben
				x= Int(6 * Rnd)
		' PRÜFUNG: Ist x = 0?
		' Wenn 20 * Rnd = 0, bzw. kleiner 1 ist, dann 
		' Wird der Zähler (i) um 1 subtrahiert. 
		' Dadurch erhält man dann 8 Zahlen zwischen 1 und 20, und ohne 0
		if x <=1 then 
			i=i-1
			 goto weiter
		End if
		' Wert aus "x" in Zielzelle schreiben
		' Die Adressierung der Zielzelle erfolgt hierdurch:
		' getCellByPosition(14,i)	14 ist die Spalte "O".
		' "i" ist die Zählervariable. Gestartet wird die Zählung bei 3 und endet bei 15
		' Immer daran denken, die Zählung beginnt für Zeilen und Spalte immer bei 0 -->  0,1,2,3...
		' Beispiel: 
		' "A1" = 0,0 --> (Spalte,Zeile)
		' Somit ist "O4" = 14,3 --> (Spalte,Zeile)		
		oCC.ActiveSheet.getCellByPosition(55,i).value= x
weiter:		
	next i

	For i = 3 to 201
		if i = 200 then goto weiter
				y= Int(6 * Rnd)
		if y <=1 then 
			i=i-1
			 goto weiter
		End if
		oCC.ActiveSheet.getCellByPosition(56,i).value= y
weiter:		
	next i


End Sub
macht mir leider auch fehler.

Nach welcher Programiersprache muß ich googeln um mich da weiter einzulesen zu können ?

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » So, 18.11.2018 16:19

Code: Alles auswählen

REM Zufallszahl zwischen 1 und 20 erzeugen und in gewünschten Zellbereich schreiben
Sub xZufall
Dim oDoc as Object	' Objektvariable für das aktuelle Dokument
Dim oCC as Object	' Objektvariable für den Currentcotroller. Damit ist z.B. ein Zellzugriff möglich

Dim i as Integer	' Zählervariable vom Datantyp Integer
Dim x as Integer	' Variable zur Aufnahme der Zufallszahl vom Datantyp Integer

' Referenzierungen der Objektvariablen
oDoc=ThisComponent
oCC =oDoc.CurrentController

' getCellByPosition ( [in] long nColumn, [in] long nRow )
REM Zählerschleife über Zelle O4:O16 
	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(55,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(56,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(57,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(58,i).value= x
	next i
	
		For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(59,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(60,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(61,i).value= x
	next i
	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(62,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(63,i).value= x
	next i
	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(64,i).value= x
	next i

	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(65,i).value= x
	next i
	For i = 3 to 200
			x= Int(6 * Rnd) +1
		oCC.ActiveSheet.getCellByPosition(66,i).value= x
	next i

End Sub
Ich habe versucht das mir zugeschickte so zu ändern und scheinbar gibt er mir jetzt 12 Spalten mit Zufallszahlen aus von 1 bis 6 ( durch RND +1)
es dauert zwar ein bischen die jeweils 200 Zeilen zu füllen aber egal.
Es sei denn einer hat eine einfachere Lösung das ich X * 1W6 würfel ausrechnen kann.
Da Crossposting schreibe ich das hier ins andere Forum auch noch rein.

wie gesagt würde mich über weitere Verbesserungen freuen und danke.

Stephan
********
Beiträge: 10679
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von Stephan » So, 18.11.2018 16:38

mit .setDataArray() ist sowas schneller

Code: Alles auswählen

REM Zufallszahl zwischen 1 und 20 erzeugen und in gewünschten Zellbereich schreiben
Sub xZufall
Dim oDoc as Object	' Objektvariable für das aktuelle Dokument
Dim oCC as Object	' Objektvariable für den Currentcotroller. Damit ist z.B. ein Zellzugriff möglich

Dim i as Integer	' Zählervariable vom Datantyp Integer
Dim x as Integer	' Variable zur Aufnahme der Zufallszahl vom Datantyp Integer

' Referenzierungen der Objektvariablen
oDoc=ThisComponent
oCC =oDoc.CurrentController

	Dim Werte(197)
	Dim w_temp(11)
	For i = 0 To 197 '3-200
		Redim w_temp(11)
		For j = 0 To 11 '55-66
			w_temp(j) = Int(6 * Rnd) +1
		Next j
		Werte(i) = w_temp()
	Next i
	
	oCC.ActiveSheet.getCellRangeByPosition(55,3,66,200).setDataArray(Werte())
End Sub

Gruß
Stephan

mikeleb
******
Beiträge: 742
Registriert: Fr, 09.12.2011 16:50

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von mikeleb » So, 18.11.2018 16:42

Hallo,
ich habe nicht alles verstanden (insbesondere wo/was die 12 Zeilen sein sollen).
Hier mal ein Vorschlag:

Code: Alles auswählen

sub Wurfel
	'Zugriff auf das Dokument
	odoc=ThisComponent
	otab=odoc.sheets(0)
	'finde den benutzten Bereich
	ocur=otab.createcursor
	ocur.gotoendofusedarea(false)
	letzte_zeile=ocur.rangeaddress.endrow
	letzte_spalte=ocur.rangeaddress.endcolumn
	'Spalte E auslesen
	aSpalteE=otab.getcellrangebyposition(4,3,4,letzte_zeile).getDataArray
	'Spalten AY-BC auslesen
	aSpalteINI=otab.getcellrangebyposition(50,3,54,letzte_zeile).getDataArray
	'schreibe INI-Wert in Spalte BC, wenn in Spalte E ein "X" steht
	'INI-Wert ist AY+AZ+BA+Zufallszahl
	'Zufallszahl aus Bereich von BB bis 6*BB
	for i=0 to ubound(aSpalteE())
		if aSpalteE(i)(0)="X" then
			'wie viele 6er Würfel
			n=aSpalteINI(i)(3)
			z=int(rnd()*5*n)+n+aSpalteINI(i)(0)+aSpalteINI(i)(1)+aSpalteINI(i)(2)
			aSpalteINI(i)(4)=z
		end if
	next
	'INI-Werte in Tabelle schreiben
	otab.getcellrangebyposition(50,3,54,letzte_zeile).setDataArray(aSpalteINI())
	'Bereich sortieren
	Dim SortProps(2) As new com.sun.star.beans.PropertyValue
	Dim SortFeld(0) As new com.sun.star.table.TableSortField
	oBereich = otab.getcellrangebyposition(0,3,letzte_spalte,letzte_zeile)
	SortFeld(0).Field = 0
	SortFeld(0).IsAscending = False
	SortProps(0).Name = "SortFields"
	SortProps(0).Value = SortFeld()
	SortProps(1).Name = "SortColumns"
	SortProps(1).Value = False
	SortProps(2).Name = "ContainsHeader"
	SortProps(2).Value = False
	oBereich.Sort(SortProps())

end sub
Das Makro schreibt in die Spalte BC die gewünschten INI-Werte (AY+AZ+BA+Zufallswert). Allerdings nur in den Zeilen, in denen in Spalte E ein "X" steht.
Anschließend wir die ganze Tabelle (ab Zeile 4) nach Spalte A absteigend sortiert.
Ich arbeite mit den Methoden .getDataArray und .SetDataArray, die einfach schneller sind als der zellenweise Zugriff. Da damit keine Formeln geschrieben werden, muss man manchmal vorsichtig sein. Hier könnte etwas schiefgehen, wenn in den Spalten AY-BC irgendwo Formeln stehen würden!
Gruß,
mikeleb

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » So, 18.11.2018 17:35

Weil jede Person würfelt mit einem 6 seitigen würfel.
und aber jeder von 1 bis 12 solcher würfel haben kann womit er würfelt.

jetzt habe ich 12 würfelwerte und habe es so in die Tabelle geschrieben das er mir die Werte
zusammenrechnet je nachdem ob er 1 oder 3 oder 10 Würfel hat.

Ich werde mir die anderen Lösungen noch genau anschauen aber da das dauert denke ich
markiere ich den Beutrag lieber als Gelöst und fals ich ein neues Problem habe schreibe ich erneut.

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » So, 18.11.2018 18:11

Das is die Letzte Version von mir mit 12 Spalten.
incl. den Button für Würfeln und einen zum anschließenden sortieren.

Die Spalte A hat die Zufallszahl und andere Werte Verbunden damit ich eine Zahl zum sortieren habe.
( ja ich weiß habe beim Verketten noch nen denkfehler drinnen die Ini von 8 ist größer als eine 70 aber das schaffe ich noch :D )

wenn jetzt einer das Macro ändern möchte / will /bitte Bitte damit es schneller eingetragen wird bin ich dankbar.

Achten auf Crossposting
Dateianhänge
SR 5 Ini 99% 4.02.ods
(68.64 KiB) 16-mal heruntergeladen

mikeleb
******
Beiträge: 742
Registriert: Fr, 09.12.2011 16:50

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von mikeleb » So, 18.11.2018 21:36

Hallo,
damit es schneller eingetragen wird bin ich dankbar
Warum machst du es dir so kompliziert? Anders gefragt: Was passt an meinem Vorschlag nicht? (Damit will ich nicht sagen, dass er besonders gut sei oder dass du ihn nutzen musst!)
Gruß,
mikeleb

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » So, 18.11.2018 22:08

@mikeleb du meinst dein Macroprogramm ? ich habe es nocht nicht getestet werde ich aber morgen oder übermorgen machen.
jetzt läuft es erstmal aber das er 10 sekunden braucht um alle Zufalsszahlen zu generieren.

Aber danke für eure Verbesserungsvorschläge

Antworten