Anzeige
Archiv - Navigation
1576to1580
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

Do Schleife

Do Schleife
26.08.2017 10:27:55
Siegfried
Hallo zusammen,
ich möchte Zufallszahlen ohne Wiederholungen generieren und habe folgenden Code:
Obergrenze = AnzEin
Untergrenze = Range("Standard.Anzahl") + Range("Rest.Anzahl") + 1
For Each Rng In RngAll.Cells
iRandomize = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Do Until WorksheetFunction.CountIf(RngAll, iRandomize) = 0
iRandomize = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Loop
Rng.Value = iRandomize
Next Rng
Dabei bereitet die Do Schleife Schwierigkeiten (gelegentlich erhalte ich die Meldung "keine Rückmeldung") und die Datei hängt sich auf (unabhängig von der Größe von RngAll).
Wie könnte man das umgehen?
Gruß
Siegfried

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Do Schleife
26.08.2017 11:05:16
Siegfried
Hallo
ich habe den Fehler gefunden (Obergrenze bzw. Untergrenze war falsch)
AW: Do Schleife
26.08.2017 11:22:13
Sepp
Hallo Siegfried,
für eine überschaubare Anzahl von Zufallszahlen eine Möglichkeit,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub zufall()
Dim Obergrenze As Long, Untergrenze As Long
Dim objArrayList As Object, varRnd As Variant, lngI As Long, lngRnd As Long

Obergrenze = 499
Untergrenze = 250

Set objArrayList = CreateObject("System.Collections.Arraylist")

Randomize Timer

With objArrayList
  For lngI = 1 To Obergrenze - Untergrenze + 1
    Do
      lngRnd = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
      If Not .Contains(lngRnd) Then
        .Add (lngRnd)
        Exit Do
      End If
    Loop
  Next
  varRnd = .toArray
End With


Range("A1").Resize(UBound(varRnd) + 1, 1) = Application.Transpose(varRnd)

Set objArrayList = Nothing
End Sub

Bei großen Mengen, gibt es schnellere Methoden.
Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige