Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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
Anzeige
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
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 :-)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zufallszahlen mit festem Mittelwert in Excel generieren


Schritt-für-Schritt-Anleitung

Um in Excel 150 Zufallszahlen zu erzeugen, die zwischen 1 und 10 liegen und einen festen Mittelwert (z. B. 6) haben, kannst du die folgende VBA-Methode verwenden:

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Menü Einfügen und dann Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden VBA-Code in das Modul:
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
  1. Schließe den VBA-Editor.
  2. Erstelle einen Button in Excel: Ansicht → Symbolleisten → Formular → Schaltfläche.
  3. Rechtsklicke auf die Schaltfläche und wähle Makro zuweisen. Wähle das Makro tt aus.
  4. Klicke auf die Schaltfläche, um die Zufallszahlen zu generieren.

Häufige Fehler und Lösungen

  • Problem: Die Zufallszahlen sind nicht zwischen 1 und 10.

    • Lösung: Stelle sicher, dass die Berechnung in der For-Schleife z(n) = Int((10 * Rnd) + 1) korrekt ist.
  • Problem: Die generierten Zahlen sind negativ oder nicht im gewünschten Bereich.

    • Lösung: Überprüfe die Bedingung in der If-Anweisung, die sicherstellt, dass die Werte zwischen 1 und 10 liegen.

Alternative Methoden

Eine einfache Alternative zur Verwendung von VBA ist die Nutzung des Excel-Solvers. Hier ist eine kurze Anleitung:

  1. Erstelle in den Zellen A1 bis A10 eine Zufallszahl zwischen 1 und 10 mit der Formel =ZUFALLSBEREICH(1;10).
  2. Gehe zu DatenSolver.
  3. Setze das Ziel auf die Zelle, die den Mittelwert berechnet, und setze den Zielwert auf 6.
  4. Wähle A1:A10 als veränderbare Zellen.
  5. Klicke auf Lösen.

Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Zufallszahlen zwischen 1 und 10 zu erzeugen:

  1. Trage in Zelle A1 die Formel =ZUFALLSBEREICH(1;10) ein und ziehe sie bis zur Zelle A150.
  2. Berechne den Mittelwert in Zelle B1 mit der Formel =MITTELWERT(A1:A150).
  3. Experimentiere mit dem Solver, um sicherzustellen, dass der Mittelwert 6 erreicht wird.

Tipps für Profis

  • Nutze die RANDBETWEEN-Funktion in Kombination mit anderen Excel-Funktionen, um deine Daten zu analysieren.
  • Experimentiere mit größeren Datensätzen, um zu sehen, wie sich der Mittelwert bei unterschiedlichen Zufallszahlen verhält.
  • Verwende die Datenanalyse-Tools in Excel, um statistische Berechnungen durchzuführen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur ganze Zahlen generiert werden? Im VBA-Code wird Int((10 * Rnd) + 1) verwendet, was sicherstellt, dass nur ganze Zahlen zwischen 1 und 10 generiert werden.

2. Kann ich die Anzahl der Zufallszahlen ändern? Ja, du kannst die Variable anz im VBA-Code ändern, um eine andere Anzahl von Zufallszahlen zu generieren.

3. Funktioniert das auch in Excel Online? Die VBA-Methode funktioniert nicht in Excel Online. Du kannst jedoch die Solver-Methode verwenden, die auch in Excel Online verfügbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige