Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1836to1840
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

VBA: Zahlen per Zufallsauswahl

VBA: Zahlen per Zufallsauswahl
24.06.2021 16: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

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

Betreff
Datum
Anwender
Anzeige
AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 16: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 16: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 16: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 16: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 16: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 16:55:47
Fritz_W
Auch Dir vielen Dank Timo, werde es so versuchen
mfg
Fritz
AW: VBA: Zahlen per Zufallsauswahl
24.06.2021 19: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 12: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 20: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
AW: Ist doch eine simple Formel (nur) in A2
24.06.2021 20: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
Anzeige
Kann man ja machen
25.06.2021 06: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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige