Hi Stephan,
du bist auch mit nix zufrieden oder? Das ist auch gut so. Denn ein Makro ist etwas, das nie fertig wird. Geht mir auch immer so, dass man hier und da noch was sieht, was man noch einbauen könnte. Das Problem dabei: Irgendwann will man was einbauen, womit man den ganzen bisherigen Code komplett umschreiben muss. Deshalb muss man entweder sagen, jetzt ist Schluss, oder halt in den sauren Apfel beißen. Aus diesem Grund ist es grundsätzlich immer besser, sich vorher ein Konzept zurechtzulegen, was man mit dem Code überhaupt erreichen will. Das ist jezt hier schon die vierte Zusatzfrage. Wenn du das nächste Mal eine Frage in einem Forum stellst, solltest du also bitte gleich alle Karten auf den Tisch legen und sagen was du willst, sonst könntest du deine Helfer schnell vergrätzen.
Zu deiner Frage: Ja das ist auch möglich. Dafür benötigst du aber einen zuvor fest definierten Bereich. Wenn ich dich richtig verstehe ist der Zielbereich für y also L9:R9 und L11:R11. Irgendwo dort in diesen Zellen willst du die 6 Ypsilon-Werte zufällig reinkopieren, korrekt?
Zunächst musst du den Zufallsgenerator initiieren. Das macht man zumeist mit dem Befehl Randomize Timer. Dann musst du die Zufallszahl berechnen. Das wird mit Int(rnd * (Max - Min + 1)) + Min gemacht. Was du mit dieser Zufallszahl anstellst bleibt dir überlassen. Du kannst so z.B. zeile und Spalte in deinem Zielbereich berechnen oder die Position der Zelle im Zielbereich. Hier mal ein Beispiel für Zeile und Spalte:
Sub CommandButton2_Click()
Dim z1 As Long, z2 As Long, s2 As Long
Randomize Timer
Set Quelle = Sheets("FCLM_Data")
Set ziel = Sheets("Board")
z2 = 9: s2 = 3: z3 = 9: s3 = 12: z4 = 13: s4 = 12
Set ZielbereichY = ziel.Range("L9:Q9")
For z1 = 1 To Quelle.Cells(Rows.Count, 1).End(xlUp).Row
If s2 > 10 Then
s2 = 3
z2 = z2 + 2
End If
If s4 > 18 Then
s4 = 12
z4 = z4 + 2
End If
If Quelle.Cells(z1, 1) <> "" Then
If Quelle.Cells(z1, 13) = "y" And y < 6 Then
Do
s3 = Int(Rnd * (18 - 12 + 1)) + 12
z3 = Int(Rnd * (11 - 9 + 1)) + 9
Loop Until z3 <> 10 And ziel.Cells(z3, s3) = ""
ziel.Cells(z3, s3) = Quelle.Cells(z1, 1)
y = y + 1
ElseIf Quelle.Cells(z1, 13) = "p" And p < 2 Then
ziel.Cells(z4, s4) = Quelle.Cells(z1, 1)
s4 = s4 + 1
p = p + 1
Else
ziel.Cells(z2, s2) = Quelle.Cells(z1, 1)
s2 = s2 + 1
End If
End If
Next z1
End Sub
Achtung: Ich habe hier Do Loop verwendet um wirklich nur die gewünschten Zellen anzusprechen. Das kann bei Unachtsamkeit schnell zu einer Dauerschleife führen. Vor dem erneuten Ausführen, solltest du die Daten im Zielblatt also löschen. z.B. mit Ziel.Cells.ClearContents. Sonst stürzt womöglich dein Excel ab.
Gruß Mr. K.
|