Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Zufallszahl aus Bereich vergeben

VBA Zufallszahl aus Bereich vergeben
13.02.2020 10:13:21
Trampus
Hallo liebe Community,
ich habe da ein Problem, welches ich gerne mittels VBA lösen möchte - nur fehlen mit die nötigen Kenntnisse. Ich hoffe auf eure Hilfe :-)
Hier der Link zu der Datei: https://www.herber.de/bbs/user/135161.xlsm
Mit Klick auf einen Button ('Auslosung Reihenfolge Wk 1') soll folgendes passieren:
- Jedem Aktiven in Spalte A (A2:A57) soll zufällig eine Zahl aus dem Bereich F1:L8 zugewiesen werden
- dabei darf jede Zahl nur einmal vergeben werden.
- Jede leere Zeile soll (A2:A57) übersprungen werden bzw. leer gelassen werden (es soll keine Startnummer zugewiesen werden).
- Bei bspw. 20 gemeldeten Aktiven dürfen nur die Zahlen 1-20 zugewiesen werden.
- Mit erneutem Klick auf den Button sollen andere Zahlen aus dem Bereich F1:L8 zugewiesen werden.
Danke und viele Grüße
Trampus
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zufallszahl aus Bereich vergeben
13.02.2020 11:15:17
Torsten
Hallo Trampus,
hier meine Loesung dazu. Habe aber deinen Zahlenbereich nicht verwendet. Ich zaehle nur die nicht leeren Zellen in Spalte A im Bereich A2:A57. Dann habe ich die Menge an Zahlen, die vergeben werden muessen. In dem Fall 20. In der Varieblen I gespeichert. Dann vergebe ich die Zufallszahlen. Ueberpruefe aber jedesmal, ob die Zahl schon vorhanden ist. Wenn ja, wird eine neue vergeben, die noch nicht vorhanden ist. Deine Datei auch dabei mit Code auf der Schaltflaeche.

Sub Schaltfläche2_Klicken()
Dim Vergleichsbereich As Range
Dim Bereich As Range, Zelle As Range
Dim c
Dim I As Long, A As Long, lgZu As Long
Set Bereich = ActiveSheet.Range("A2:A57")
ActiveSheet.Range("D2:D57").ClearContents
For Each Zelle In Bereich
If Zelle  "" Then
I = I + 1
End If
Next
For Each Zelle In Bereich
If Zelle  "" Then
Randomize
1:      lgZu = Int(Rnd() * I) + 1
Set c = ActiveSheet.Range("D2:D57").Find(lgZu, lookat:=xlWhole)
If c Is Nothing Then
Zelle.Offset(0, 3) = lgZu
Else
GoTo 1
End If
End If
Next
End Sub

Gruss Torsten
https://www.herber.de/bbs/user/135165.xlsm
Anzeige
AW: VBA Zufallszahl aus Bereich vergeben
13.02.2020 11:20:36
Trampus
Mega vielen Dank für die schnelle Hilfe :D Funktioniert hervorragend!
VG
Trampus
gerne...
13.02.2020 11:24:57
Torsten
AW: VBA Zufallszahl aus Bereich vergeben
13.02.2020 11:17:37
onur
ich habe da ein Problem, welches ich gerne lösen möchte - nur fehlen mit die nötigen Kenntnisse. Ich hoffe auf deine Hilfe :-)
- Das Wohnzimmer sollte gestrichen werden
- Die Farbe der Wände sollte ein helles grün sein
- Die Farbe der Decke sollte ein helles blau sein
- die alte Tapete müsste vorher entfernt werden
- Die Kanten müssen mit Krepp abgeklebt werden
- Der Boden sollte farbfrei bleiben
Danke und viele Grüße
Onur
Anzeige
AW: VBA Zufallszahl aus Bereich vergeben
13.02.2020 12:07:38
Daniel
Hi
noch ne Variante, die Startnummern zu vergeben.
die Liste wird automatisch nach Anzahl der Teilnehmer erzeugt.
Sub Schaltfl?che2_Klicken()
Dim Zelle As Range
Dim Bereich As Range
Dim Anzahl As Long
Dim arr
Dim i As Long, x As Long, z As Long
Set Bereich = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Anzahl = WorksheetFunction.CountA(Bereich)
ReDim arr(1 To Anzahl)
'--- Startnummern erzeugen
For i = 1 To Anzahl
arr(i) = i
Next
'--- Startnummern in zuf?llige Reihenfolge bringen
For i = 1 To Anzahl
z = WorksheetFunction.RandBetween(1, Anzahl)
x = arr(i)
arr(i) = arr(z)
arr(z) = x
Next
'--- Startnummern vergeben
i = 0
For Each Zelle In Bereich.SpecialCells(xlCellTypeConstants, 2)
i = i + 1
Zelle.Offset(0, 3).Value = arr(i)
Next
End Sub
die Leerzellen müssen echte Leerzellen sein.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Zufallszahlen aus einem Bereich vergeben


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei: Stelle sicher, dass die Datei, in der du die VBA-Makros verwenden möchtest, geöffnet ist.

  2. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (dein_dateiname)", wähle "Einfügen" und dann "Modul".

  4. Füge den Code ein: Kopiere den folgenden Code in das Modul:

    Sub ZufallszahlenVergabe()
       Dim Vergleichsbereich As Range
       Dim Bereich As Range, Zelle As Range
       Dim c
       Dim I As Long, lgZu As Long
    
       Set Bereich = ActiveSheet.Range("A2:A57")
       ActiveSheet.Range("D2:D57").ClearContents
    
       For Each Zelle In Bereich
           If Zelle <> "" Then
               I = I + 1
           End If
       Next
    
       For Each Zelle In Bereich
           If Zelle <> "" Then
               Randomize
               Do
                   lgZu = Int(Rnd() * I) + 1
                   Set c = ActiveSheet.Range("D2:D57").Find(lgZu, lookat:=xlWhole)
               Loop While Not c Is Nothing
               Zelle.Offset(0, 3) = lgZu
           End If
       Next
    End Sub
  5. Schließe den VBA-Editor: Drücke ALT + Q, um den Editor zu schließen.

  6. Füge einen Button hinzu: Gehe in Excel zu "Entwicklertools" und füge einen Button ein. Verknüpfe den Button mit dem Makro ZufallszahlenVergabe.

  7. Teste das Makro: Klicke auf den Button, um die Zufallszahlen zu generieren. Jede aktive Zeile in Spalte A erhält eine zufällige Zahl zwischen 1 und 20.


Häufige Fehler und Lösungen

  • Problem: Keine Zahlen werden zugewiesen.
    Lösung: Stelle sicher, dass Spalte A (A2:A57) keine leeren Zellen enthält und dass die Anzahl der Teilnehmer nicht größer ist als die Anzahl der verfügbaren Zahlen.

  • Problem: Die Zahlen wiederholen sich.
    Lösung: Überprüfe den Code und stelle sicher, dass die Bedingung zum Überprüfen bereits zugeteilter Zahlen korrekt implementiert ist.


Alternative Methoden

Wenn du eine andere Methode zur Vergabe von Zufallszahlen ausprobieren möchtest, kannst du die folgende Variante nutzen. Diese erstellt eine Liste von Startnummern und mischt sie:

Sub ZufallszahlenMischen()
    Dim Zelle As Range
    Dim Bereich As Range
    Dim Anzahl As Long
    Dim arr
    Dim i As Long, x As Long, z As Long

    Set Bereich = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    Anzahl = WorksheetFunction.CountA(Bereich)
    ReDim arr(1 To Anzahl)

    ' Startnummern erzeugen
    For i = 1 To Anzahl
        arr(i) = i
    Next

    ' Startnummern in zufällige Reihenfolge bringen
    For i = 1 To Anzahl
        z = WorksheetFunction.RandBetween(1, Anzahl)
        x = arr(i)
        arr(i) = arr(z)
        arr(z) = x
    Next

    ' Startnummern vergeben
    i = 0
    For Each Zelle In Bereich.SpecialCells(xlCellTypeConstants, 2)
        i = i + 1
        Zelle.Offset(0, 3).Value = arr(i)
    Next
End Sub

Praktische Beispiele

  • Beispiel 1: Wenn du die Anzahl der Teilnehmer auf 20 beschränken möchtest, stelle sicher, dass die Werte in Spalte A nicht mehr als 20 aktive Teilnehmer enthalten.

  • Beispiel 2: Um Zufallswerte aus einer spezifischen Liste zu generieren, kannst du den Code anpassen, um Werte aus einem definierten Bereich (z.B. F1:L8) auszulesen.


Tipps für Profis

  • Verwende Application.Volatile, wenn du sicherstellen möchtest, dass die Funktion bei jeder Berechnung neu ausgeführt wird.
  • Experimentiere mit anderen Zufallsfunktionen in VBA, um verschiedene Zufallszahlen zu generieren, z.B. mit Application.WorksheetFunction.RandBetween(1, 100) um eine zufällige Zahl zwischen 1 und 100 zu erhalten.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass jede Zahl nur einmal vergeben wird?
Du kannst die Find-Methode verwenden, um zu überprüfen, ob die Zufallszahl bereits zugewiesen wurde.

2. Wie kann ich den Bereich ändern, aus dem die Zufallszahlen vergeben werden?
Ändere einfach den Bereich im Code, z.B. von F1:L8 zu einem anderen Bereich, den du verwenden möchtest.

3. Ist es möglich, Zufallszahlen auch für andere Bereiche zu generieren?
Ja, du kannst den Code anpassen, um unterschiedliche Bereiche oder Bedingungen zu berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige