Hallo an Alle,
ich bin absoluter Neuling in VBA. Allerdings sind andere Programmiersprachen (C, Java...) bekannt,
Ich bin dabei eine Zufallsgenerator für Namenauswahl zu erstellen.
Es gibt es Liste mit Namen und per Zufall sollen eine bestimmte Menge an Namen ausgewählt werden, hervorgehoben werden und in eine neue Zelle geschrieben werden. Soweit hatte das auch funktioniert, allerdings gab es doppelte Ergebnisse, weshalb ich die Zufallszahl gerne in ein Array speichern würde und nach jeder Generierung der Zufallszahl (geschieht in einer For) abgleicht, ob die Zahl schon vorhanden ist.
Bei Ausführen erhalte ich den Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs.
Kann mir einer kurz helfen? Finde meinen Fehler nicht.Hallo an Alle,
Private Sub CommandButton1_Click() 'Zufall
Dim a As Integer 'Anzahl Namen aus Formel (ZAEHLEWENN)
a = Sheets("Tabelle1").Range("E9").Value
Dim zufall() As String 'Array definieren
ReDim zufall(1 To a) As String
Dim zaehler As Integer ' Zaehler f¸r Zellen zum Schreiben der Liste, soll erst bei 2 beginnen
zaehler = 2
Dim zaehler_arr As Long 'Zaehler f¸r Array
zaehler_arr = 1
Dim intRow As Integer
For intRow = 1 To Range("E1")
Dim r As Range, zufallszelle As Integer, zufallsbereich As Integer
Set r = Range("B2:B3000").SpecialCells(xlCellTypeConstants) 'merke dir nur bef¸llte Zellen (hier nur Konstanten, formeln w¸rden ignoriert)
zufallsbereich = Int(Rnd() * r.Areas.Count) + 1 'Ermittle, aus wievielen Bereichen die bef¸llten Zellen bestehen und suche dir irgendeine aus (RND-Funktion)
Sprungziel: zufallszelle = Int(Rnd() * r.Areas(zufallsbereich).Cells.Count) + 1 'Such dir aus dem beliebigen Bereich irgendeine Zelle aus
zufall(zaehler_arr) = zufallszelle 'speichere Zufallszelle in Array
zaehler_arr = zaehler_arr + 1 'Zahler f¸r Array
Dim j As Long, found As Boolean
For j = 1 To UBound(zufall)
If zufall(j) = zufallszelle Then
found = True
End If
Exit For
Next j
If found = True Then
GoTo Sprungziel 'Berechne neue Zufallszelle
Else
r.Areas(zufallsbereich).Cells(zufallszelle).Activate 'Aktiviere die zufallszelle im Zufallsbereich
r.Areas(zufallsbereich).Cells(zufallszelle).Interior.ColorIndex = 4
Sheets("Tabelle1").Range("G" & zaehler).Value = r.Areas(zufallsbereich).Cells(zufallszelle) 'Werte in aktuelle Zelle schreiben
zaehler = zaehler + 1 'zaehler f¸r Zelle um eins erhoehen
End If
Next intRow
Range("E1").Select 'Auswahl von E1 um nicht auf aktiver Zufallszahlzelle zu landen
End Sub
|