Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

eine belibige zahl unregelmässig teilen, durch zufallgenerator





Frage

Hallo kann ich eine belibige zahl durch 12 unregelmässig teilen, und die zahlen sollen sich durch zufallgenerator ändern. zb die zahl 51 : 12 = 1+3+5+8+1+6+3+6+7+1+9+1

Antwort 1 von Saarbauer

Hallo,
Zitat:
belibige zahl durch 12 unregelmässig teilen

man kann jede Zahl durch 12 teilen, aber das ist schon eine regemässigkeit.

Auch dein Beispiel ist nich gerade verständlich

Gruß

Helmut

Antwort 2 von ila

sorry , versuche es noch einmal zu formulieren

Wie erstelle ich eine Exeltabelle, indem das Ergebnis von einer Divisionsaufgabe( eine beliebige Zahl

durch eine andere beliebige Zahl) eine Summe von zufälligen Zahlen darstellt und den Divident ergibt?

zB.

27 : 6 = 7 + 2 + 6 + 1 + 9 + 2

Antwort 3 von RIDDIK

Hallo,

also: eine Beliebige in eine bestimmte Anzahl von zufälligen Summanden zerlegen?

Gruß

Antwort 4 von RIDDIK

(ich vergesse immer wieder Wörter)

also: eine Beliebige Zahl in eine bestimmte Anzahl von zufälligen Summanden zerlegen?

Gruß

Antwort 5 von Primut

Hi Ila,

also mit Makro geht das locker, mit Formel sicher etwas schwieriger, da Formeln von der Sache her nicht beliebig sind.

Frage:
Die Ausgangszahl ist beliebig?, oder innerhalb eines bestimmten Bereiches?

Du gehst von ganzen Zahlen aus? oder von natürlichen?

Ist die Anzahl der Teilzahlen auch beliebig?

Dürfen sich die Teilzahlen auch wiederholen (oder negativ oder 0) sein?

Beste Grüße erstmal

Primut

Antwort 6 von ila

Die Ausgangszahl ist beliebig?, oder innerhalb eines bestimmten Bereiches? beliebig

Du gehst von ganzen Zahlen aus? oder von natürlichen? natürlichen

Ist die Anzahl der Teilzahlen auch beliebig? beliebig

Dürfen sich die Teilzahlen auch wiederholen (oder negativ oder 0) sein? nicht negativ, 0 oder wiederholung ist möglich

ila

Antwort 7 von Primut

Hi ila,

keine Ahnung, was du genau machen willst oder brauchst,
ich hab mal, ein Makro gebastelt, was von der Sache her läuft, ansonsten nochmal melden:


Sub Zahlenteilung()
Randomize Timer

Dim Ausgangszahl As Integer
Dim Teilanzahl As Integer

Dim Zahl As Integer
Dim Sum As Integer
Dim Max As Integer
Dim z As Integer
Ausgangszahl = Cells(1, 1).Value
Teilanzahl = Cells(1, 2).Value
 Sum = 0
Zahl = 0
Max = Ausgangszahl
For z = 1 To Teilanzahl - 1
 Zahl = Int(Rnd * (Max + 1))
 Sum = Sum + Zahl
 Cells(1 + z, 1).Value = Zahl
 If Sum = Ausgangszahl Then
   Max = 0
  Else
   Max = Ausgangszahl - Sum
  End If
Next z
 If Sum = Ausgangszahl Then
  Cells(1 + Teilanzahl, 1).Value = 0
 Else
  Cells(1 + Teilanzahl, 1).Value = Ausgangszahl - Sum
 End If
 
End Sub



Dieses Makro einfügen unter Alt+F11, dort unter Einfügen / Modul einfügen und in das Fenster das Makro hineinkopieren.

Zum Makro: in Feld A1 ist die aufzuteilende Zahl einzutragen,
in Feld B1 ist die Anzahl der Teilzahlen einzutragen.
Entsprechende Aufteilung wird mit Makro Ausführen unter A1 angezeigt.
Wichtig: ich habe auf die Schnelle keine Überprüfung eingebaut, ob natürliche Zahlen eingegeben werden.
Bei diesem Makro sind die Zahlen nur bedingt zufällig, d.h. sie werden tendenziell immer kleiner.
Ich bin davon ausgegangen, daß die Verteilung nicht auch zufällig sein muß.
Ebenso bin ich davon ausgegangen, daß die Teilzahlen sich in dem selben Bereich bewegen kann wie die Ausgangszahl, d.h. du wirst tendenziell viele Nullen erhalten, bsp. wenn 50 aufgeteilt werden soll und die erste Zufallszahl von 10 gewünschten schon 49 ist, dann bleiben nur noch 1 und 8 Nullen..., kannst du aber auch selbst ausprobieren.

Gruß Primut

Antwort 8 von ila

danke für deine bemühungen
es wird aber die zeille beanstandet:

Ausgangszahl = Cells(1, 1).Value

Gruß
ila

Antwort 9 von Primut

Hi,

oh, ich vermute mal, die Fehlermeldung kommt, wenn das Makro laufen soll? Typenunverträglich?

Mit dieser Zeile wird eigentlich der Wert aus der zelle A1 eingelesen und als zahl verwendet, die entsprechend geteilt werden soll. Muß natürlich vorher entsprechende zahl drinstehen. Und in Zelle B1 mußt du die Anzahl eintragen, in die geteilt werden soll.

Dann sollte es eigentlich laufen, bei mir jedenfalls ohne Probleme.
Wenn die zeile dagegen rot markiert ist, ist irgendwo ein Schreibfehler (Syntax).

Gruß Primut

Antwort 10 von ila

du hast recht es klappt nur ich habe zu viel nullen da drin
zb.
378
333
885
107
57
17
16
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
die ergibnisse bestehen hauptsächlich aus nullen, ich versuche den makro den du gestellt hast zu verstehen

ila

Antwort 11 von Bubbelup

Hallo,

Das Problem, der vielen Nullen kommt daher, weil der Zufallsgenerator sich eine beliebige Zahl aus dem verbleibenden "Zahlenraum" aussuchen kann. Vielleicht müsste man daran etwas rumbasteln. Die Nullen durch einsen zu ersetzen ist nicht so schwierig, aber eine Art "Gleichverteilung" zu erreichen dürfte etwas knifflig sein.

Gruss

Antwort 12 von Bubbelup

Nochmal ich,

Eine schnelle Möglichkeit um die Nullen zu reduzieren wäre auch folgende Änderung der Zeile:

Zahl = Int(Rnd * (Max + 1))

durch

Zahl = Int(Rnd * ((Max / (Teilanzahl - z)) + 1))

Somit werden die Ergebnisse kleiner und es bleibt "mehr" übrig für die restlichen Schleifendruchläufe.

Gruss

Antwort 13 von Primut

Hi,

na ja, hatte ich doch schon in meiner Antwort 7 erklärt.
Zitat:
Dürfen sich die Teilzahlen auch wiederholen (oder negativ oder 0) sein? nicht negativ, 0 oder wiederholung ist möglich


Ich hab mich ja nur an deine Bedingungen gehalten... ;-)

Ansonsten mußt du einfach sagen,welche Zahlenverteilung noch gewünscht wird, dann müßte man nochmal schauen...

Die Lösung von Bubbleup sieht sehr nett aus, schränkt den möglichen Zahlenbereich aber etwas ein.
Ich bin halt von Zufallszahlen über den gesamten Bereich ausgegangen, wahrscheinlich suchst du Zufallszahlen, die um den Durchschnitt (Ausgangszahl/Teilanzahl) in einer bestimmten Bandbreite ensprechend schwanken.

Gruß Primut

Antwort 14 von ila

habe bis jetzt sehr mich damit befasst es ist genauso wie ich mir vorgestellt habe.
makros sind neuland für mich habe versucht in den büchern mich über makro schlau zu machen aber es braucht zeit.

eine frage habe ich noch ist es möglich eine mappe mit dem makro zu speichern , so das ich nur die mape anklicken muss und diese funktion zu nutzen
zur zeit mache ich in dieser form
exel mape , A1 UND b1 angeben ,extras ,makro, makros ausführen.
kann man diese funktion auf eine mape speichern.
für naivität dieser frage bitte ich um entschuldigung

Gruß
ila

Antwort 15 von Bubbelup

Hello again,

Wenn dir ein Button in der Excelmappe zum starten des Makros helfen würde kannst du das tun in dem du auf
Ansicht-Symbolleisten-Formlar klickst. Und dann dort auf das Symbol für Schaltfläche klickst, dann in deiner Tabelle bei gedrückter Maustaste den Button plazierst. Danach müsste ein Fenster aufgehen, dort müsste Tabelle1.Zahlenteilung stehen. dies dann auswählen und ok drücken. Fertig

Jetzt müsste ein Button vorhanden sein, der das Makro startet.

Gruss

Antwort 16 von nighty

hi all :)

noch eine idee :)

es werden alle möglichkeiten ermittelt die das ergebnis 12 haben und der var zahl() übergeben

gruss nighty

sehr lange laufzeit versteht sich da es ja wie ein 11 bit byte ist mit a 9 schaltzuständen

Sub makro1()
Dim zahlen%(9)
Dim tt1%
Dim feld1%
Dim feld2%
Dim feld3%
Dim feld4%
Dim feld5%
Dim feld6%
Dim feld7%
Dim feld8%
Dim feld9%
Dim feld10%
Dim feld11%
Dim feld12%
Dim zahl()
For tt1% = 1 To 9
zahlen%(tt1%) = tt1%
Next tt1%
For feld11% = 0 To 9
For feld10% = 0 To 9
For feld9% = 0 To 9
For feld8% = 0 To 9
For feld7% = 0 To 9
For feld6% = 0 To 9
For feld5% = 0 To 9
For feld4% = 0 To 9
For feld3% = 0 To 9
For feld2% = 0 To 9
For feld1% = 0 To 9
For feld0% = 0 To 9
If zahlen%(feld0%) + zahlen%(feld1%) + zahlen%(feld2%) + zahlen%(feld3%) + zahlen%(feld4%) + _
zahlen%(feld5%) + zahlen%(feld6%) + zahlen%(feld7%) + zahlen%(feld8%) + zahlen%(feld9%) + _
zahlen%(feld10%) + zahlen%(feld11%) = 12 Then

rem hier wird die var die das ergebnis speichert redimensioniert mit anschliessender wertübergabe

zaehler = zaehler + 1
ReDim Preserve zahl(zaehler)

zahl(zaehler) = zahlen%(feld0%) + zahlen%(feld1%) + zahlen%(feld2%) + zahlen%(feld3%) + zahlen%(feld4%) + _
zahlen%(feld5%) + zahlen%(feld6%) + zahlen%(feld7%) + zahlen%(feld8%) + zahlen%(feld9%) + _
zahlen%(feld10%) + zahlen%(feld11%)
End If
Next feld0%
Next feld1%
Next feld2%
Next feld3%
Next feld4%
Next feld5%
Next feld6%
Next feld7%
Next feld8%
Next feld9%
Next feld10%
Next feld11%

rem hier könnte man einen zufallsgenerator einsetzen der sich auf die var zahl bzw zaehler als index bezieht und so von den möglichen ergebnissen eines zieht ,auch könnte man noch durch eine 2 dimension die einzelnen summanten festhalten

End Sub

Antwort 17 von ila

danke bubblup es hat geklappt
danke auch nighty aber da verstehe ich nur bahnhof schade.
aber ich versuche es mit hilfe von meinem buch das zu verstehen.

die vorhandene tabelle ist genial und wie ich sie haben wollte nur für für meine information und neugier möchte ich noch eine frage stellen.

wenn man teilzahlen als bruchzahlen erzeugen möchte, wie musste der makro aussehen, wo musste man was ändern

gruß
ila

Antwort 18 von Primut

Hi,

na schön, wenn´s funktioniert...

Was meinst du denn mir Bruchzahlen?
Wieviel Stellen hinterm Komma dürfen´s denn sein?


Gruß Primut

Antwort 19 von ila

hallo
habe viel experimentiert aber es klappt doch nicht
danke das du dich wieder gemeldet hast.
was müss ich machen wenn die teilzahlen 2stellen hinter dem komma bekommen sollten
gruß
ila

Antwort 20 von Primut

Hi ila,

theoretisch müßtest du für Kommazahlen die Zahl nicht als Integer sondern zB als Double definieren, das Problem besteht bloß darin, daß Double wesentlich mehr als zwei Kommastellen hat.
Also ein Trick: Deine Ausgangszahl mit 100 multiplizieren und dann mit natürlichen Zahlen rechnen lassen. Für die Ausgabe natürlich wieder durch 100 teilen und du hast genau 2 Kommastellen bei entsprechender Formatierung.

 Sub Zahlenteilung()
Randomize Timer

Dim Ausgangszahl As Integer
Dim Teilanzahl As Integer

Dim Zahl As Integer
Dim Sum As Integer
Dim Max As Integer
Dim z As Integer

Ausgangszahl = Cells(1, 1).Value * 100
Teilanzahl = Cells(1, 2).Value
Sum = 0
Zahl = 0
Max = Ausgangszahl
For z = 1 To Teilanzahl - 1
Rem Zahl = Int(Rnd * (Max + 1))
Zahl = Int(Rnd * ((Max / (Teilanzahl - z)) + 1))
Sum = Sum + Zahl
Cells(1 + z, 1).Value = Zahl / 100
If Sum = Ausgangszahl Then
Max = 0
Else
Max = Ausgangszahl - Sum
End If
Next z
If Sum = Ausgangszahl Then
Cells(1 + Teilanzahl, 1).Value = 0
Else
Cells(1 + Teilanzahl, 1).Value = (Ausgangszahl - Sum) / 100
End If

End Sub



Gruß Primut

Antwort 21 von ila

möglich ist auch 2 stellen ohne komma angeben und das ergibniss bei teilzahlen am letzte 2 stellen als hinter dem komma sehen.

eine fehlermeldung bekomme ich an dieser stelle:
Ausgangszahl = Cells(1, 1).Value * 100

grüss ila

Antwort 22 von Primut

Oh,

je später der Abend...?

Zugegeben, es ist nicht immer ganz leicht zu verstehen, was du überhaupt willst.

Mein Letztes Makro läuft unter der Voraussetzung, daß die Ausgangszahlen in A1 und B1 keine Kommastellen haben, und unterteilt dann in Zahlen mit zwei Kommastellen.
Klar, wenn die Ausgangszahl aus schon Kommastellen haben soll, sieht das natürlich anders aus.

Dann veränderst du halt die Variablendefinition so:

Dim Ausgangszahl As Double
Dim Teilanzahl As Integer

Dim Zahl As Double
Dim Sum As Double
Dim Max As Double
Dim z As Integer


Gruß Primut

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: