Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA: Zahlen per Zufallsauswahl

Forumthread: VBA: Zahlen per Zufallsauswahl

VBA: Zahlen per Zufallsauswahl
24.06.2021 18:03:16
Fritz_W
Hallo Forumsbesucher,
ich bitte um Unterstützung durch die VBA-Experten in diesem Forum wie folgt:
Ich möchte gerne im Zellbereich A2:A25 der Tabelle2 die Zahlen 1 bis 24 per Zufallsauswahl in die Zellen eintragen, d.h. in jede der 24 Zellen soll 1 Zahl (zwischen 1 und 24) eingetragen werden, aber jede Zahl sollte insgesamt (nur) 1x im Zellbereich eingetragen werden (damit keine Zahl mehrfach).
Für eure Unterstützung besten Dank im Voraus.
mfg
Fritz
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 18:18:07
Der
Hallo,
es geht also nur darum die Reihenfolge zufällig zu wählen, oder? Denn 24 Zufallszahlen zwischen 1 und 24 und jede Zahl darf nur einmal vorkommen ... Das heißt, Geht auch ohne VBA:
In Zelle A1 =Zufallszahl()
diese Formel nach unten bis A24 kopieren.
In B1 =RANG(A1;$A$1:$A$24)
diese Formel bis B24 nach unten kopieren.
Gruß
Michael
Anzeige
AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 18:26:48
Fritz_W
Hallo Hajo und Michael,
vielen Dank für eure Unterstützung, ich bevorzuge aber eine VBA-Lösung, da ich die Mappe weitergeben will und jedes Mal beim Öffnen der Mappe der Code ausgeführt werden soll.
mfg
Fritz
mit Kanonen auf Spatzen ;-)
24.06.2021 18:29:45
Rudi
Hallo,

Option Explicit
Sub Zufall()
Dim arr1(1 To 24, 1 To 2), arrOut(1 To 24, 1 To 1), i, j
For i = 1 To 24
arr1(i, 1) = Rnd
arr1(i, 2) = i
Next
Call QuickSort2(arr1)
For i = 1 To 24
arrOut(i, 1) = arr1(i, 2)
Next
Range("A2:A25") = arrOut
End Sub
Sub QuickSort2(ByRef DasArray, Optional ErsteZeile, Optional LetzteZeile)
On Error Resume Next
Dim UnterGrenze As Long, OberGrenze As Long, aktuelleSpalte As Long
Dim AktuellerWert, GemerkterWert As Variant
If IsMissing(ErsteZeile) Then
ErsteZeile = LBound(DasArray)
End If
If IsMissing(LetzteZeile) Then
LetzteZeile = UBound(DasArray)
End If
UnterGrenze = ErsteZeile
OberGrenze = LetzteZeile
AktuellerWert = DasArray((ErsteZeile + LetzteZeile) / 2, 1)
Do While (UnterGrenze  AktuellerWert And OberGrenze > ErsteZeile)
OberGrenze = OberGrenze - 1
Loop
If (UnterGrenze  ErsteZeile) Then Call QuickSort2(DasArray, ErsteZeile, OberGrenze)
If (UnterGrenze 
Gruß
Rudi
Anzeige
AW: mit Kanonen auf Spatzen ;-)
24.06.2021 18:53:44
Fritz_W
Hallo Rudi,
funktioniert wie gewünscht, vielen Dank für deine (unverhältnismäßige) Mühe.
mfg
Fritz
AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 18:33:01
Timo
Oder nutze die angebotene Lösung und füge doch einfach noch ein:

Private Sub Workbook_Open()
Range("xxx").Calculate
End Sub

AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 18:55:47
Fritz_W
Auch Dir vielen Dank Timo, werde es so versuchen
mfg
Fritz
Anzeige
AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 21:59:09
Daniel
Hi
So am einfachsten, wenns mit Unterstützung von Excelformeln sein darf

With Sheet("Tabelle2").Range("A2:A25")
.Offset(0, 1).FormulaLocal = "=Zufallszahl()"
.FormulaLocal = "=Rang(B2;$B$2:$B$25)"
.Formula = .Value
.Offest(0, 1).ClearContents
Ende With
als reines VBA so

dim Arr(1 to 24, 1 to 1) as long
Dim i as long
Dim j as long
Dim x as long
For i = 1 To 24
Arr(i, 1) = i
Next
For i = 1 to 24
j = Worksheetfunction.Randbetween(1, 24)
x = Arr(i, 1)
Arr(i, 1) = Arr(j, 1)
Arr(j, 1) = x
Next
Sheets("Tabelle2").Range("A2:A25").value = Arr
Gruß Daniel
Anzeige
AW: VBA: Zahlen per Zufallsauswahl
26.06.2021 14:40:48
Fritz_W
Hallo Daniel,
habe leider erst eben Deine Lösungsvorschläge bemerkt.
Funktioniert perfekt.
Ganz herzlichen Dank für Deine Unterstützung.
mfg
Fritz
Ist doch eine simple Formel (nur) in A2
24.06.2021 22:01:21
RPP63
Moin!

=SORTIERENNACH(SEQUENZ(24);ZUFALLSMATRIX(24))
Funktioniert natürlich nicht im archaischen 2010, sondern nur in einem aktuellen Excel oder Excel Online.
(oder Google Sheets)
Gruß Ralf
Anzeige
AW: Ist doch eine simple Formel (nur) in A2
24.06.2021 22:19:47
Daniel
Müsste aber auch per VBA eingetragen und durch Werte ersetzt werden, wenn sich die Werte nicht alle Naslang ändern sollen, sonden nur einmalig beim Öffnen der Mappe neu gewürfelt werden soll.
Gruß Daniel
Kann man ja machen
25.06.2021 08:28:36
RPP63
Allerdings sind ein paar Punkte zu beachten:
1. Die Formel muss mittels .Formula2 eingetragen werden.
2. Um den dynamischen Bereich anzusprechen, braucht man .SpillingToRange

With Tabelle1.Range("M1")
.Formula2 = "=SORTBY(SEQUENCE(24),RANDARRAY(24))"
With .SpillingToRange
.Copy
.PasteSpecial xlPasteValues
End With
End With
With Application
.CutCopyMode = False
.Goto Tabelle1.Range("M1")
End With

Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18