Randomproblematik

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Mono.

    Randomproblematik

    Huhu VBAler !

    Ich bin echt eingerostet in VBA und hab schon stundenlang das Internet und Youtube durchforstet. Auch die Suchefunktion hier kann mir net so richtig helfen.

    Folgendes Problem:

    Ich habe einen Button erstellt, dessen Aufgabe es ist, eine Zahl zwischen 1-50 zufällig auszugeben und in die Zeile J3 zu schreiben. Das macht er auch. Jede weitere ausgegebene Ziffer wird in die nächste freie Zeile geschrieben.

    Nun kommt es aber natürlich vor, dass er mir irgendwann eine Ziffer doppelt ausgibt und in eine leere Zeile schreibt.

    Ich möchte, dass VOR dem Eintrag in die nächste Zeile geprüft wird, ob die ausgegebene Zahl bereits in einer der Zeilen J3-J54 vorhanden ist und wenn ja, dann soll er eine noch nicht ausgegebene Ziffer wählen und eintragen.

    Mein bisheriger Code sieht wie folgt aus:

    Sub Button1_Click()

    Dim number As Integer


    number = Rnd("1") * ("50")


    If Sheets("Sheet1").Cells(3, 10).Value = "" Then

    Sheets("Sheet1").Cells(3, 10).Value = number

    Else

    Sheets("Sheet1").Cells(Cells(Rows.Count, "J").End(xlUp).Row + 1, "J").Value = number

    End If


    MsgBox number


    End Sub

    ich habe bisher folgendes erfolglos probiert:

    If ActiveCell.Value = Sheets("Sheet1").Range("J3:J54").Value Then

    number = Rnd("1") * ("50") + 1

    end if

    Kann mir bitte jemand nen roten Faden an die Hand geben?
    Hi

    verwende doch am besten den Codeeditor (ist der Button hier im Editor mit VB 6.0). Dann kann man den code besser lesen.

    Ich würde es so machen:

    Visual Basic-Quellcode

    1. Sub RandomCells(ByVal RowFrom As Long, ByVal Column As Long, ByVal LowBound As Long, ByVal UpBound As Long)
    2. Dim c As New Collection
    3. Dim i As Integer
    4. Dim Number As Integer
    5. For i = LowBound To UpBound
    6. c.Add i, CStr(i)
    7. Next
    8. For i = 0 To c.Count - 1
    9. Number = CInt((c.Count - 1) * Rnd()) + 1
    10. Sheets(1).Cells(RowFrom + i, Column).Value = c.Item(Number)
    11. c.Remove (Number)
    12. Next
    13. End Sub


    Aufruf so:

    Visual Basic-Quellcode

    1. RandomCells 3, 12, 1, 50



    Erst werden die Zahlen (von LowerBound to Upperbound) in eine Collection gespeichert. Dann wird Upperbound mal ein zufälliges Element aus der Liste gewählt und in die Zelle geschrieben und aus der Liste entfernt. So ist es unmöglich Dopplungen zu haben.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
  • Benutzer online 1

    1 Besucher

  • 2 Benutzer haben hier geschrieben