Einträge zufällig auswählen lassen

Va7e

Mitglied
Hey,

ich will ein Programm schreiben, mit dem die Einträge einer Listbox ZUFÄLLIG in die andere Listbox eingetragen werden.

Beispiel: In der List1 gibts 100 Einträge, von 1 bis 100. Wenn ich jetzt auf Command1 klicke, soll der 20 Einträge von der List1 in die List2 übertragen, ob sortiert oder unsortiert, ist mir vollkommen egal, hauptsache ist, dass sich die Werte NICHT wiederholen!

Bis jetzt habe ich folgendes:

Private Sub cmdAdd_Click()
Dim L1 As Variant

For L1 = 1 To 100
List1.AddItem (L1)
Next L1
End Sub

Muss ich jetzt irgendwie die Randomize-Funktion benutzen? Falls ihr noch etwas genauer wissen wollt, dann schreibt es einfach hier rein :)

Mit freundlichen Grüßen,

Va7e
 
Naja nicht ganz so, wie ich das wollte :)

Kann man das denn so machen: Wenn ich auf Command1 klicke, dass dann z.B. 10 Zahlen zwischen 1 und 50 generiert werden? Das muss doch irgendwie mit der Randomize-Funktion gehen oder nicht? Sagen wir mal ich gebe in die zwei Textboxen "1" und "50" ein, klicke auf Command1 und dann kriege ich 10 zufällig ausgewählte Einträge?

Oder ich bin einfach nur zu blöd :)

Va7e
 
Randomize initialisiert nur den Zufallszahlen-Generator. Was du meinst ist die RND-Funktion.

Ausserdem hoffe ich doch sehr, dass du genannten Thread bis zum Ende gelesen hast, weil da steht ne Lösung bzw. ein Ansatz für dich, wenn du Listboxen verwenden willst.

P.S.: Habe gerade festgestellt, dass in genannter Lösung der Randomize-Aufruf vor die Do-Loop-Schleife gehört. Es macht keinen Sinn, bei jedem Durchlauf den Zufallszahlen-Generator neu zu initialisieren.
 
Wieso bin ich eigentlich so gutmütig zur Zeit? :suspekt:

Visual Basic:
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Command1_Click()
Dim arrQuelle() As Long     'Leeres Array erzeugen

'Hilfsvariablen
Dim Anzahl As Long
Dim Aus as Long
Dim i As Long
Dim j As Long
Dim Treffer As Long
Dim Zufall As Long

    'Festlegen der "Spielvariante" - Bsp. 6 (=Anzahl) aus 49 (=Aus)
    Anzahl=txtAnzahl.Text
    Aus=txtAus.Text

    ReDim arrQuelle(1 To Aus)
    
    'Erstellen Urmenge
    For i = 1 To Aus
    
        arrQuelle(i) = i
    
    Next
    
    Treffer = 0
    Randomize

    Do
        
        'Ubound = Funktion zum Ermitteln der oberen Array-Grenze
        Zufall = Int(UBound(arrQuelle) * Rnd + 1)
    
        Treffer = Treffer + 1
        ListBox1.AddItem arrQuelle(Zufall)
        
        'Ausschneiden der bereits gezogenen Zahl aus dem Quell-Array
        For j = Zufall + 1 To UBound(arrQuelle)
        
            CopyMemory arrQuelle(j - 1), arrQuelle(j), 4
            
        Next
        
        'Verkleinern des Quell-Arrays um 1
        ReDim Preserve arrQuelle(1 To UBound(arrQuelle) - 1)
           
    Loop Until Treffer = Anzahl

End Sub
 
PERFEKT!

Ich hab mir dein Beispiel nochmal ganz genau angeguckt und auf ner anderen Seite habe ich noch etwas gefunden, jetzt klappts 100% :)

Vielen Dank!
 
Zurück