VBA Zufallszahlen aus einem Bereich vergeben
Schritt-für-Schritt-Anleitung
-
Öffne die Excel-Datei: Stelle sicher, dass die Datei, in der du die VBA-Makros verwenden möchtest, geöffnet ist.
-
Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
-
Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (dein_dateiname)", wähle "Einfügen" und dann "Modul".
-
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
-
Schließe den VBA-Editor: Drücke ALT + Q, um den Editor zu schließen.
-
Füge einen Button hinzu: Gehe in Excel zu "Entwicklertools" und füge einen Button ein. Verknüpfe den Button mit dem Makro ZufallszahlenVergabe.
-
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.