Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1612to1616
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
Inhaltsverzeichnis

Zufallszahlen

Zufallszahlen
03.03.2018 12:18:33
kallemann
Hallo Freunde,
ich hab ein kleines Problem. Im Zuge meiner Masterarbeit brauche ich für mein aufgestelltes lineares Optimierungsmodell in Cplex (OPL) Inputdaten einer bestimmten Form.
Einfach ausgedrückt möchte ich eine bestimmte Zahl n innerhalb einer Zeile innerhalb einer fixen Anzahl von Spalten durch Einsen und Nullen zufällig verteilen lassen.
Die Summe der Einsen soll dann wieder die Zahl n ergeben.
Bsp:
n = 34
Anzahl Spalten = 254
Zeile = 1. Zeile
Demnach soll jetzt in der 1. Zeile die Eins innerhalb der angegebenen Spalten so oft vorkommen, dass die Einsen in der Summe wieder 34 ergeben. Und die Einsen sollen dabei zufällig auf die Spalten verteilt werden.
Meint ihr das ist möglich? Wenn ja, hättet ihr vielleicht ein paar Ansätze für mich?
Das wäre klasse :-)
Vielen Dank und viele Grüße
kallemann

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zufallszahlen
03.03.2018 12:31:20
Sepp
Hallo Kalle,
Sub zufall()
Dim rng As Range, varOut() As Variant
Dim lngSize As Long, lngCount As Long, lngIndex As Long

Set rng = Sheets("Tabelle1").Range("A1") 'erste Zelle der Ausgabe 

lngSize = 254
lngCount = 34

Redim varOut(1 To 1, 1 To lngSize)

For lngIndex = 1 To lngSize
  varOut(1, lngIndex) = 0
Next

Randomize

Do
  lngIndex = Int(lngSize * Rnd + 1)
  If varOut(1, lngIndex) = 0 Then varOut(1, lngIndex) = 1
Loop While Application.Sum(varOut) < lngCount

rng.Resize(1, lngSize) = varOut


Set rng = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

 AB
1Gruß Sepp
2Windows 10 64 bit
3Office 365 32 bit

Anzeige
AW: Zufallszahlen
03.03.2018 12:53:49
kallemann
Hey Sepp,
ich danke dir vielmals, das funktioniert 1A, das ist ja Wahnsinn :-)
Kurze Frage noch:
Meinst du man kann da noch eine Dimension einbauen? Also jetzt verteilt er die Zahlen in der 1. Zeile; hatte ich ja auch so definiert in meinem Ausgangspost.
Meinst man könnte mit einem zusätzlichen Parameter noch mitgeben, dass er genau dieselbe Prozedur (die anderen Parameter bleiben gleich) noch in m weiteren Zeilen wieder durchführt?
AW: Zufallszahlen
03.03.2018 14:10:17
Sepp
Hallo Kalle,
kein Problem.
Sub zufall2()
  Dim rng As Range, varOut() As Variant
  Dim lngCols As Long, lngCount As Long, lngRows As Long, lngI As Long, lngR As Long

  Set rng = Sheets("Tabelle1").Range("A1") 'erste Zelle der Ausgabe 

  lngCols = 254     'Anzahl Spalten 
  lngRows = 25      'Anzahl Zeilen 
  lngCount = 34     'Anzahl 1en 

  Redim varOut(1 To lngRows, 1 To lngCols)

  For lngR = 1 To lngRows
    For lngI = 1 To lngCols
      varOut(lngR, lngI) = (lngCount >= lngCols) * -1
    Next
  Next
  
  If lngCount < lngCols Then
    Randomize
    For lngR = 1 To lngRows
      Do
        lngI = Int(lngCols * Rnd + 1)
        varOut(lngR, lngI) = 1
      Loop While Application.Sum(Application.Index(varOut, lngR)) < lngCount
    Next
  End If
  
  rng.Resize(lngRows, lngCols) = varOut

  Set rng = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

 AB
1Gruß Sepp
2Windows 10 64 bit
3Office 365 32 bit

Anzeige
AW: Ansatz
03.03.2018 12:46:54
Fennek
Hallo,
vesuche es mal mit:

Sub Main
i = 0
do while cells(1,"IW")  34 or i = 20
with range("A1:IT1")
.formula = "=int(rand() + 0.13)"
.value = .value
cells(1, "IW") = worksheetfunction.sum(.value)
end with
loop
cells(2, "IW") = i
End Sub
mfg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige