Mehrmals nacheinander Zelleninhalte zufällig wählen und addi (VBA)

Newbie33, Freitag, 26.04.2019, 13:32 (vor 89 Tagen)

Hallo liebe Forumsmitglieder,

bin was VBA betrifft schon lange aus der Übung. Ich brauche einen Code, der mir aus einer gegebenen Spalte zufällig eine Zelle auswählt, den Inhalt speichert und dann wieder zufällig eine Zelle auswählt und den neuen Inhalt mit dem Inhalt der Zelle davor addiert und wieder eine Zelle auswählt und den Inhalt dazu addiert zur Summe davor usw.. Das ganze Prozedere wiederholt sich nach einer festgelegten Anzahl (z.B 10 mal). Hierbei ist aber immens wichtig, dass eine Zelle die bereits ausgewählt wurde nicht nochmal drankommt.

Kann mir jemand zumindest den Ansatz bzw. die Vorgehensweise erläutern oder gar den Code aufschreiben ? Über Hilfe würde ich mich sehr freuen.

Vielen Dank

Newbie33

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Martin Asal @, Montag, 29.04.2019, 08:41 (vor 86 Tagen) @ Newbie33

Hallo Newbie,

hier kannst du die Anzahl als Paramter übergeben. Diese Funktion geht fest davon aus, dass die Werte in B10:B250 stehen, aber das kannst du bestimmt leicht für deine Zwecke anpassen.

Public Function RndSum(Anz As Integer)
Dim Liste(10 To 250)    'In den Zeilen 10 bis 250 stehen die auszuwählenden Zahlen
Dim Zeile As Integer    'Aktuelle Zeile
Dim x As Integer
 
Randomize Timer
 
'bestücke Liste mit Werten, aber nur so viele, wie benötigt werden
Do
    Zeile = Int((UBound(Liste) - LBound(Liste) + 1) * Rnd + LBound(Liste))
    If Liste(Zeile) = 0 Then
        Liste(Zeile) = ActiveSheet.Range("B" & Zeile).Value     'Gesucht wird in Spalte "B"
        x = x + 1
    End If
    If x >= Anz Then Exit Do
Loop
 
'Jetzt zähle die Werte in der Liste zusammen
For x = LBound(Liste) To UBound(Liste)
    RndSum = RndSum + Liste(x)
Next
 
End Function


Martin

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Newbie33, Dienstag, 30.04.2019, 17:48 (vor 85 Tagen) @ Martin Asal

Hallo lieber Martin,

viele Dank für deine Mühe. Also bisschen kann ich den Code nachvollziehen. Wo im Code wird dafür gesorgt, dass der Wert einer zufällig ausgewählten Zeile in der Spalte mit den Daten in der Schleife nicht noch einmal ausgewählt wird ? Das wäre nämlich wichtig, dass das wirklich so passiert.

Beste Grüße
Newbie

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Newbie33, Dienstag, 30.04.2019, 18:01 (vor 85 Tagen) @ Martin Asal

und kannst du mir kurz sagen was hier passiert?:

If Liste(Zeile) = 0 Then

das ist mir nicht ganz klar. Liste und Zeile sind ja beides Variablen. Was genau passiert hier ?

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Martin Asal @, Dienstag, 30.04.2019, 19:11 (vor 85 Tagen) @ Newbie33

Was genau passiert hier ?

Das stellt sicher, dass keine Zelle doppelt ausgewählt wird ;-)

Das Array "Liste" symbolisiert sozusagen deine Wertliste (den Range). Wenn eine Zelle ausgewählt wird, wird deren Wert in den Array kopiert, falls dieser Wert noch nicht ausgewählt wurde. Falls doch, wird die Schleife erneut durchlaufen, bis genügend Werte ausgewählt sind (bis x = Anz. Ich habe "x >= Anz" geschrieben. Größer wird zwar nie passieren, aber manchmal bin ich übervorsichtig).

Mir fällt gerade auf, dass in in den Zellen nicht "0" stehen darf. Eine "0" würde nicht gewertet werden. Außerdem solltest du dafür sorgen, dass "Anz" nicht größer ist als die Anzahl der Zellen (UBound - LBound), bzw der Anzahl Einträge in den Zellen.

Martin

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Newbie33, Dienstag, 30.04.2019, 19:35 (vor 85 Tagen) @ Martin Asal

ah ok :)

nur noch eine Frage. Die Zelleninhalte können teilweise gleich sein. Wird hier der Inhalt verglichen oder nur die Position der Zelle ?

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Newbie33, Dienstag, 30.04.2019, 19:56 (vor 85 Tagen) @ Newbie33

Ach ja und 0 kann als Wert in der Zelle auch vorkommen:-O Kann man das Problem beheben ? Kann ja sein dass als Ergebnis 0 rauskommen muss

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Newbie33, Dienstag, 30.04.2019, 20:11 (vor 85 Tagen) @ Newbie33

Entschuldigung, dass ich immer einen neuen Eintrag erstelle, aber mir fällt immer im nachhinein was neues ein. Ich habe es leider nicht explizit erwähnt, aber es ist ,wohl wenn ich den Code anschaue, wichtig zu wissen, dass in den Zellen sowohl Nullen als auch Zahlen mehrfach vorkommen können. Diese Aussage fasst also meine letzten 2 Einträge zusammen. Also wenn ein Zelleninhalt ausgewählt wird, ist es wichtig, dass nicht die selbe Zelle nochmal hergenommen wird. Der Inhalt der Zelle kann aber durchaus (was tatsächlich sehr oft der Fall ist) nochmal erscheinen. Wie du vorher erwähnt hast, hat anscheinend das Programm Probleme mit der 0. Jedoch kommt die 0 auch sehr oft vor, sodass also das Ergebnis auch 0 sein kann und somit die definierte Funktion 0 ausgeben können muss.

Beste Grüße
Newbie

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Martin Asal @, Donnerstag, 02.05.2019, 12:16 (vor 83 Tagen) @ Newbie33

Ein Problem besteht momentan nur mit "0".

Ich bin aber auch ein Dummerchen: Da Liste() ja Variant ist, lässt sich die Sache ganz einfach beheben. Ändere den Vergleich einfach zu

If IsEmpty(Liste(Zeile)) Then

Außerdem solltest du folgendes dazu lesen: Erst mal was zu Datentypen, damit du verstehst, dass Liste() vom Typ Variant ist und welchen Startwert es hat, dann noch zur Funktion IsEmpty, damit du die Überprüfung verstehst.

Martin

Mehrmals nacheinander Zelleninhalte zufällig wählen und addi

Newbie33, Donnerstag, 02.05.2019, 21:11 (vor 83 Tagen) @ Martin Asal

Ok, ich schaus mir mal genauer an aber so langsam passt das Programm denke ich ...
vielen Dank nochmal für die Mühen. Das ist sehr nett.

RSS-Feed dieser Diskussion
powered by my little forum