Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
696to700
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
696to700
696to700
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zufallszahlen

Zufallszahlen
18.11.2005 22:50:46
Dieter
Hallo,
aus den Zahlen 1 bis 256 sollen 128 Zahlen zufällig ausgewählt werden.
Das bekomme ich noch hin, aber wie stelle ich sicher, dass es dabei keine
doppelten gibt? Es muss eine Lösung mit Makro sein.
Danke Dieter

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zufallszahlen
18.11.2005 23:18:17
Josef Ehrensberger
Hallo Dieter!
Eine Möglichkeit!
Sub ZufallsZahlen()
Dim dblZahlen() As Long, dblGezogen() As Variant
Dim intCount As Integer, intIndex As Integer, intZufall As Integer
Dim intStart As Integer, intEnde As Integer, intAnzahl As Integer

intStart = 1 'Erste Zahl
intEnde = 256 'Letzte Zahl
intAnzahl = 128 'Anzahl Zufallszahlen

Redim dblZahlen(intEnde - intStart)
Redim dblGezogen(intAnzahl - 1)

'Array füllen
For intCount = intStart To intEnde
  dblZahlen(intIndex) = intCount
  intIndex = intIndex + 1
Next

intIndex = 0
Randomize Timer

'Zufallszahlen ziehen
For intCount = 0 To intAnzahl - 1
  intZufall = Int(Rnd() * UBound(dblZahlen))
  dblGezogen(intIndex) = dblZahlen(intZufall)
  dblZahlen(intZufall) = dblZahlen(UBound(dblZahlen))
  If UBound(dblZahlen) = 0 Then Exit For
  Redim Preserve dblZahlen(UBound(dblZahlen) - 1)
  intIndex = intIndex + 1
Next

'Zufallszahlen sortieren
QuickSort dblGezogen

'In Bereich ausgeben (ab "A1")
Range(Cells(1, 1), Cells(intAnzahl, 1)) = Application.Transpose(dblGezogen)

End Sub


' Quicksort
'
Sub QuickSort(data() As Variant, Optional UG, Optional OG)
Dim P1&, P2&, T1 As Variant, T2 As Variant

UG = IIf(IsMissing(UG), LBound(data), UG)
OG = IIf(IsMissing(OG), UBound(data), OG)

P1 = UG
P2 = OG
T1 = data((P1 + P2) / 2)

Do
  
  Do While (data(P1) < T1)
    P1 = P1 + 1
  Loop
  
  Do While (data(P2) > T1)
    P2 = P2 - 1
  Loop
  
  If P1 <= P2 Then
    T2 = data(P1)
    data(P1) = data(P2)
    data(P2) = T2
    P1 = P1 + 1
    P2 = P2 - 1
  End If
  
Loop Until (P1 > P2)

If UG < P2 Then QuickSort data, UG, P2
If P1 < OG Then QuickSort data, P1, OG

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Zufallszahlen
18.11.2005 23:27:15
Dieter
Hallo,
danke, dachte nicht, dass das so kompliziert ist. Auch dachte ich, dass Quicksort
eher was für große Arrays ist. Würde bei den wenigen Zahlen ein einfaches Bubblesort
nicht reichen?
Grüße Dieter
AW: Zufallszahlen
18.11.2005 23:37:34
Josef Ehrensberger
Hallo Dieter!
Sicher würde hier BubbleSort auch reichen, aber ich verwende fast immer
QuickSort, weil ich das einfach als Codesnipplet vorliegen habe.
Gruß Sepp
aehmm, was ist......
18.11.2005 23:58:37
th.heinrich
hallo Dieter & Josef,
bitte quicksort bzw. bubblesort?
gruss thomas
AW: aehmm, was ist......
19.11.2005 00:10:07
Dieter
Hallo Thomas,
das unterschiedliche Methoden, Arrays zu sortieren. Bubblesort ist eine einfach Methode eher für kleinere Datenmengen, Quicksort ist deutlich schneller. Es gibt auch noch andere Methoden, die aber alle für mich zu schwer zu verstehen sind.
Wenn dich das interessiert, frag mal Nepumuk, der ist Experte.
Grüße Dieter
Anzeige
danke Dieter & Micha.....
19.11.2005 01:20:33
th.heinrich
fuer Euere hinweise, bin mal wieder in meinem level VBA nein bestaerkt worden.
gruss thomas
AW: Zufallszahlen
20.11.2005 00:07:31
nighty
hi ihr :)
hier noch eine variante
gruss nighty
Option Explicit

Sub makro01()
Randomize Timer
ReDim zuzahl(256) As Integer
Dim zahl(128) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 128
For allezahlen = 1 To 256
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 128
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(ziehung, 1) = zahl(ziehung)
Next ziehung
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige