Zufallszahlen ohne doppelte Werte per VBA
#1
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

.xlsx   Zufallszahlen.xlsx (Größe: 13,17 KB / Downloads: 7)
Antworten Top
#2
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!
Gruß
Michael
Antworten Top
#3
(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.
Antworten Top
#4
Hast Du meinen Link gesehen? Hast Du die Seite dort gelesen?
Gruß
Michael
Antworten Top
#5
Du brauchst nur F9.


Angehängte Dateien
.xlsx   __einfach so_snb.xlsx (Größe: 11,34 KB / Downloads: 9)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
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
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • MdeJong
Antworten Top
#7
@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.
Gruß
Michael
Antworten Top
#8
Sollte hier eigentlich nicht relevant sein, da die Arrayliste nur eindeutige aufnimmt und dann ja nur der Rang der Zahl ermittelt wird.

Gruß Elex
Antworten Top
#9
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.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • MdeJong
Antworten Top
#10
Hi snb  :)


genau so....gefällt mir!

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

Gruß
Mike


.zip   Form Zahlen generieren.zip (Größe: 311,37 KB / Downloads: 5)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste