Clever-Excel-Forum

Normale Version: Zufallszahlen ohne doppelte Werte per VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo liebe Forum-Mitglieder,

habe folgendes Problem:

Ich möchte Zufallszahlen von 1 - 24 generieren lassen. ...also 6 Zahlen auswerfen lassen
Habe es schon mit Formel Zufallszahl und Zufallsbereich versucht, bekomme aber bei beiden oft doppelte Werte.

Ich würde das ganze gerne per Button über VBA erledigen lassen....leider kann ich kein VBA.
Kann mir hier jemand eine gute Lösung dafür geben?

Gruß
Mike
[attachment=32657]
Hallo,

ohne VBA:
https://www.herber.de/excelformeln/pages...iehen.html

Mit VBA:
Denkbar wäre, ein Dictionary oder eine Collection zu verwenden und dieses mit Zufallszahlen zu füllen.
Um bessere Zufallszahlen zu bekommen würde ich die Worksheet-Funktionen (Zufallszahl oder Zufallsbereich) nutzen statt der VBA-Funktion!
(27.06.2020, 10:15)Der Steuerfuzzi schrieb: [ -> ]Hallo,

ohne VBA:
https://www.herber.de/excelformeln/pages...iehen.html

Mit VBA:
Denkbar wäre, ein Dictionary oder eine Collection zu verwenden und dieses mit Zufallszahlen zu füllen.
Um bessere Zufallszahlen zu bekommen würde ich die Worksheet-Funktionen (Zufallszahl oder Zufallsbereich) nutzen statt der VBA-Funktion!
Hallo
beides ....(Zufallszahl oder Zufallsbereich) .....habe ich schon ausprobiert.....kommen aber doppelte Werte.
Es sollen auch ganze Zahlen ausgeworfen werden......2 - 8  - 12 - 22 - 31  - 44     z. B.
Hast Du meinen Link gesehen? Hast Du die Seite dort gelesen?
Du brauchst nur F9.
Hi

Hatte ich in VBA mal so gelöst.
Code:
'100% jede Zahl nur ein mal
'Zahlenbereich von 1 - xx
Public Sub Start()
Dim objZuf As Object, objZufSort As Object
Dim bis As Long, k, j As Long

bis = 24    'Zahlenbereich von 1 bis 24

Set objZuf = CreateObject("System.Collections.Arraylist")
Set objZufSort = CreateObject("System.Collections.Arraylist")

Randomize
Do
  k = Rnd
   If Not objZuf.Contains(k) Then
     objZuf.Add (k)
     objZufSort.Add (k)
   End If
Loop While bis > objZuf.Count
objZufSort.Sort

For j = 1 To 6  '6 Zahlen von 24
  Cells(22, j) = objZuf.IndexOf(objZufSort(j - 1), 0) + 1
Next j

Set objZuf = Nothing
Set objZufSort = Nothing

End Sub
Gruß Elex
@Elex: Eventuell ist es nicht relevant aber rnd liefert keine guten (Pseudo-)Zufallszahlen. Die Arbeitsblattfunktionen arbeiten hier wesentlich besser.
Mir ist es aufgefallen, als ich ein paar Hundert GUID mit rnd erzeugt habe und (komischerweise) einige Dubletten hatte.
Sollte hier eigentlich nicht relevant sein, da die Arrayliste nur eindeutige aufnimmt und dann ja nur der Rang der Zahl ermittelt wird.

Gruß Elex
Kann auch so:

Code:
Sub M_snb()
  Randomize
  sn = Array(Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd, Rnd)
   
  ReDim sp(5)
  For j = 0 To UBound(sp)
    sp(j) = Application.Match(Application.Large(sn, j + 1), sn, 0)
  Next
   
   MsgBox Join(sp, vbLf)
End Sub

@Steuer

Randomize ist wichtig in VBA.
Hi snb  :)


genau so....gefällt mir!

jetzt habe ich noch eine Frage......die habe ich in der beigefügten Bilddatei beschrieben  :)

Gruß
Mike

[attachment=32660]
Seiten: 1 2 3