Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
636to640
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zufallszahlen mit festem Mittelwert

Zufallszahlen mit festem Mittelwert
20.07.2005 13:37:02
Steffen
Hallo,
Ich versuche in einem Excel Sheet 150 Zufallszahlen zu erzeugen, die jeweils zwischen 1 und 10 liegen.
Der Mittelwert aller dieser Zufallszahlen soll im Endeffekt einen vorher festgelegten Wert ergeben!
z.B. ich möchte den Mittelwert 6 erhalten und suche dafür 150 Zahlen. Im Prinzip genau das Gegenteil von der Mittelwertbildung :-)
Weiß jemand von Euch bescheid wie das geht?
Vielen dank

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zufallszahlen mit festem Mittelwert
20.07.2005 13:58:49
Reinhard
Hi Steffen,
ich habe herum gebastelt. Die Zufallszahlen nacheinander zu erzeugen und immer zu prüfen ob der Durchschnitt 6 ist, geht nicht.
Entweder ist die erste Zufallszahl z.b. ein1 1, dann bräuchte man also ein 11 um auf den Schnitt von 6 zu kommen was ja nicht geht.
Oder die erste Zahl ist eine 8, dann fand mein Programm die 4 . So, um jetzt mit der 3ten Zahl auf einen Schnitt von 6 zu kommen ist die 3te Zahl eine 6, dies bei der vierten usw, also erhält man die Kette: 8,4,6,6,6,6,...
Soweit zur Therorie, warum mein nachstehender Code n eine Endlosschleife gerät nachdem er die 2te zahl findet ist mir unklar.
Problemlösung ist m.E. so möglich, alle 150 Zahlen erzeugen, dann prüfen wo der Schnitt liegt, dann "zufälli" irgendeine zahl herausgreifen, sie entsprechend um 1 vermindern erhöhen, und das anze solange bis der Schnitt bei 6 liegt
Gruß
Reinhard
Option Base 1
Sub tt()
Dim z() As Integer
ReDim z(1)
z(1) = Int((10 * Rnd) + 1)
MsgBox z(1)
For n = 2 To 150
For nn = 1 To n - 1
x = x + z(nn)
Next nn
ReDim Preserve z(n)
z(n) = Int((10 * Rnd) + 1)
While (x + z(n)) / nn <> 6
z(n) = Int((10 * Rnd) + 1)
Wend
MsgBox z(n)
Next n
For n = 1 To 150
MsgBox z(n)
Next n
End Sub

Gruß
Reinhard
Anzeige
AW: Zufallszahlen mit festem Mittelwert
20.07.2005 14:26:39
Steffen
Vielen Dank schon einmal für eure Unterstützung.
ich habe mir schon gedacht, dass ich das irgendwie selber alles zusammenflicken muss!
Na das wird nen Spass
Danke ihr 2
AW: Zufallszahlen mit festem Mittelwert
20.07.2005 14:03:45
Ramses
Hallo
oder als Alternative den solver verwenden
 
 ABCDE
1-3.9 Ergebnis6 
2-2.9    
3-1.9    
4-0.9    
50.1    
61.1    
72.1    
83.1    
94.1    
105.1    
11     
Formeln der Tabelle
D1 : =SUMME(A1:A10)
 

SOLVER aufrufen
Als Zielwert "WERT" vorgeben
Veränderbare Zellen A1:A10
Nebenbedingungen nach Bedarf
Gruss Rainer
Anzeige
Lösung per vba
20.07.2005 14:22:26
Reinhard
Hi Steffen,

Option Base 1
Sub tt()
anz = 150
w = 6
ReDim z(anz) As Integer
For n = 1 To anz
z(n) = Int((anz * Rnd) + 1)
x = x + z(n)
Next n
faktor = (x / anz >= w) * 2 - 1
While (x / anz) <> w
t = Int((anz * Rnd) + 1)
Select Case x / anz
Case Is > 6
z(t) = z(t) - 1
x = x + -1
Case Is < 6
z(t) = z(t) + 1
x = x + 1
Case Else
GoTo ende
End Select
Wend
ende:
For n = 1 To anz
MsgBox z(n)
Next n
MsgBox x / anz
End Sub
Gruß
Reinhard
Case Else Teil und die faktorzeile kann weg owT
20.07.2005 14:25:14
Reinhard
Gruß
Reinhard
AW: Lösung per vba
20.07.2005 14:31:10
Steffen
Das sieht ja echt genial aus!!! :-)
Wenn Du mir nur noch schnell verraten könntest, ob da nur ganze Zahlen rauskommen und wie ich das über VBA einfüge, damit die Zellen ausgefüllt sind?
Bin nämlich absoluter anfänger was VBA angeht!
Danke für deine Mühe
Anzeige
AW: Lösung per vba
20.07.2005 14:56:29
Reinhard
Hi Steffen,
Alt+F11, Einfügen Modul, kopiere dort den Code herein, ändere ihn wie nachstehend gesagt ab, Editor schliessen.
In Excel Ansicht--Symbolleisten--Formular, dort holst du dir eine Schaötfläche, Rechtsklick darauf und makro zuweisen auswählen, dann weist d dem Knopp das Makro tt() zu.
Im Code ändere die 3letzte Zeile so ab dass es dann so asusiehr:

ende:
For n = 1 To anz
Cells(n, 1) = z(n)
Next n
...
Wobei das "ende:" auch weg kann wenn du den case else Teil entfernt hast.
Ansonsten, wenn du den Code verstehen willst um ihn später mal selbsständig anzupassen, dann Alt+F11, Doppelklick auf "Modul1" und den Cursor nacheinander auf alle Befehle stellen und dann F1 drücken, bzw im Hilfeindex nach den Befehlen suchen.
Gruß
Reinhard
Anzeige
AW: Lösung per vba
20.07.2005 15:14:25
Steffen
Nau sauber das läuft ja richtig gut.
Bist du VBA professor? :-)
Nur ein bzw 2 kleine Probleme hab ich noch.
Die Zahlen liegen nicht zwischen 1 und 9 und sie sollten eigentlich nicht negativ sein!
Wenn du das noch hinkriegst bin ich dir sehr sehr dankbar
AW: Lösung per vba
20.07.2005 15:47:28
Reinhard
Hi Steffen,
ich hatte nicht mit 150 getestet sondern mit 10 deshalb fiel mir der Fehle nicht auf:
Gruß
Reinhard

Option Base 1
Sub tt()
Application.ScreenUpdating = True
anz = 150
w = 6
ReDim z(anz) As Integer
For n = 1 To anz
z(n) = Int((10 * Rnd) + 1)
x = x + z(n)
Next n
While (x / anz) <> w
t = Int((anz * Rnd) + 1)
If z(t) > 1 And z(t) < 10 Then
Select Case x / anz
Case Is > 6
z(t) = z(t) - 1
x = x + -1
Case Is < 6
z(t) = z(t) + 1
x = x + 1
End Select
End If
Wend
For n = 1 To anz
Cells(n, 1) = z(n)
Next n
Application.ScreenUpdating = False
End Sub

Anzeige
AW: Lösung per vba
20.07.2005 15:54:41
steffen
Tausend Dank
Du hast mir echt mega viel Arbeit erspart!!
Schönen Abend noch :-)

114 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige