Anzeige
Archiv - Navigation
1568to1572
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
30.07.2017 10:42:29
Gerhard
Hallo zusammen,
Suche VBA Lösung um in Spalte ab B2 bis B-variabel Zufallszahlen zu generieren!
Der Bereich ab und bis zu welchem Zahlenwertbereich (z.B ab 90 bis 170) die Zufallszahlen generiert werden, sollte jeweils über eine Input Funktion eingegeben werden können.
Desweiteren sollten keine doppelten Zufallszahlen generiert werden!
Vielen Dank für Eure Hilfe
Gruß Gerhard

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zufallszahlen
30.07.2017 12:44:04
Tino
Hallo,
kannst mal so versuchen.
kommt als Code in Modul1
Option Explicit 

Sub Makro1()
Dim varVon, varBis, varAnzahl
Dim ArData()
Dim nZahl&, i&, n&

'von
varVon = Application.InputBox("Von?", Type:=1)
If VarType(varVon) = vbBoolean Then Exit Sub 'Abbruch

'bis
varBis = Application.InputBox("Bis?", Type:=1)
If VarType(varBis) = vbBoolean Then Exit Sub 'Abbruch

If varBis < varVon Then Exit Sub 'Fehler eingabe

'Anzahl
varAnzahl = Application.InputBox("Anzahl?", Type:=1)
If VarType(varAnzahl) = vbBoolean Then Exit Sub 'Abbruch
If varAnzahl > (varBis - varVon + 1) Or varAnzahl = 0 Then Exit Sub 'Fehler eingabe

'Erstellen
Redim ArData(1 To varAnzahl, 1 To 1)
With Application.WorksheetFunction
For n = 1 To varAnzahl
i = i + 1
Do
nZahl = .RandBetween(varVon, varBis)
Loop While IsNumeric(Application.Match(nZahl, ArData, 0))
ArData(i, 1) = nZahl
Next
End With

'Ausgabe
With Tabelle1
'alte Daten löschen
.Range("B2", .Cells(.Rows.Count, 2)).ClearContents
.Range("B2").Resize(Ubound(ArData)) = ArData
End With
End Sub
Sub Makro2()
'
' Makro2 Makro
'

'
Range("A1").Select
ActiveCell.FormulaR1C1 = "=RANDBETWEEN(10,100)"
Range("A2").Select
End Sub
Gruß Tino
Anzeige
AW: Zufallszahlen
30.07.2017 12:45:25
Tino
Hallo,
die "Sub Makro2()..." kann komplett gelöscht werden war vom test übrig!
Gruß Tino
AW: Zufallszahlen
30.07.2017 13:33:08
Sepp
Hallo Gerhard,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub zufall()
Dim varNumbers As Variant, varInput As Variant

On Error GoTo ErrExit

varInput = Application.InputBox("Zahlenbereich eingeben - Format: (n n)", "Zufallszahlen", Type:=2)

If VarType(varInput) <> vbBoolean Then
  
  varNumbers = randomNumbers(Clng(Split(varInput, " ")(0)), Clng(Split(varInput, " ")(1)))
  
  With Sheets("Tabelle1")
    .Range("B2:B" & .Rows.Count) = ""
    .Range("B2").Resize(UBound(varNumbers) + 1) = Application.Transpose(varNumbers)
  End With
  
End If

Exit Sub

ErrExit:
MsgBox "Falsche Eingabe!"
End Sub

Private Function randomNumbers(ByVal lowerLimit As Long, upperLimit As Long, Optional Count As Long = -1) As Variant
Dim vntTmp() As Variant, lngNumbers() As Long, lngC
Dim lngIndex As Long, lngCount As Long, lngRnd As Long

lngCount = upperLimit - lowerLimit + 1
If Count > 0 Then
  lngC = Count - 1
Else
  lngC = lngCount - 1
End If
Redim lngNumbers(1 To lngCount)
Redim vntTmp(lngC)

For lngIndex = 1 To lngCount
  lngNumbers(lngIndex) = lowerLimit + lngIndex - 1
Next

Randomize Timer

For lngIndex = 0 To lngC
  lngRnd = Int(UBound(lngNumbers) * Rnd + 1)
  vntTmp(lngIndex) = lngNumbers(lngRnd)
  lngNumbers(lngRnd) = lngNumbers(UBound(lngNumbers))
  If UBound(lngNumbers) > 1 Then Redim Preserve lngNumbers(1 To UBound(lngNumbers) - 1)
Next

randomNumbers = vntTmp
End Function

Gruß Sepp

Anzeige
AW: Zufallszahlen
30.07.2017 14:44:55
Gerhard
Hallo Tino und Sepp,
Vielen Dank für Eure Hilfe!
Beide Varianten funktionieren super !!
einen schönen Sonntag noch...
Gruß Gerhard

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige