In Zufallsgenerator bestimmte Zeilen wenn Anzahl auf "null" nicht mehr berücksichtigen
Hallo Ihr guten Geister dieses Forums, habe eine Auslosung mit eurer Hilfe bereits hin bekommen (Forumssuche).
Nun stoße ich aber auf ein Problem welches ich nicht alleine lösen kann. Mit dem unten angegebenen Zufallsgenerator kann ich zwar Ziehungen durchführen aber der zieht halt sollange weiter bis ich keine Lust mehr habe. In dem Tabellenblatt "Gewinne" habe ich in der Spalte A die Namen, in Spalte B die dazugehörigen Nummern (sind für diese Sache unerheblich) und in Spalte C die Anzahl der zu Verfügung stehenden Gewinne. Ich habe es nun auch schon hin bekommen das die Ahnzahl bei jeder passende Ziehung um eins reduziert wird. Jetzt mein Problem: wie muß der Zufalssgenerator geändert werden , das er die Gewinne die in der Spalte C eine Null oder kleiner (Minuszahlen) haben, nicht mehr berücksichtigt werden, bis ich die Zahlen wieder per Hand erhöhe und wie kann ich den Zufallsgenerator dazu bringen die Häufigkeit der Ziehungen des einzelnen Gewinnes prozentual in Abhängigkeit der Anzahl in Spalte C zu machen. z.B.: Trostpreise 200 Stück, kleinerer Gewinn 100 Stück, nächst höherer Gewinn 50 Stück ... bis zum Hauptgewinn sagen wir mal 5 Stück.
Ich hoffe ich habe Euch nicht vor eine unlösbare Aufgabe gestellt.
Sub Zufall1()
Dim G(20) As Integer
Dim vorhanden As Boolean
Dim Anz, a, i, z, x
'Anzahl der Einträge in Tabelle1 ermitteln
Anz = Tabelle1.Range("A65536").End(xlUp).Row
'Anzahl der zu ziehenden Namen
a = 1
For i = 1 To a 'Ziehung
Do 'Prüfschleife
Randomize 'Echte Zufallszahl erzeugen (1-Anz)
z = Int(Rnd * Anz) + 1
Debug.Print z
vorhanden = False 'Merker zurücksetzen
For x = 1 To i 'Prüfung, ob Zahl schon gezogen wurde
If G(x) = z Then 'Wurde ZZ schon gezogen?
vorhanden = True 'Ja, markieren
Exit For
End If
Next 'nein, nächte Zahl prüfen.
If Not vorhanden Then 'Wenn Zufallszahl nicht markiert wurde,
G(i) = z 'dann diese notieren und
Exit Do 'Prüfschleife verlassen,
End If
Loop 'ansonsten einen neuen Ziehungsversuch machen.
Next
'Ausgabe der Namen auf Tabelle 3
With Tabelle3
For i = 1 To a
.Cells(i, 1) = Tabelle1.Cells(G(i), 1)
Next
End With
Sheets("Tabelle3").Select
End Sub
Vielen Dank im voraus für Eure Bemühungen.
LG Karsten
Antwort schreiben
Antwort 1 von rainberg vom 12.06.2021, 10:14 Options
Hallo Karsten,
trotz Beschreibung und Code kann ich mir nicht richtig vorstellen, was da ablaufen soll.
Kannst Du eine Beispielmappe bereitstellen?
Gruß
Rainer
Antwort 2 von kvtv vom 12.06.2021, 11:14 Options
Hallo Rainer, vielen Dank für die schnelle Antwort. Unter diesem Link findest Du die Datei:
http://www.siteupload.de/p966948-Zufallsgenerator4Forumzip.html
Gruß
Karsten
Antwort 3 von kvtv vom 12.06.2021, 20:52 Options
Hallo, ist denn hier keiner der mir einen Tipp geben kann.
Vielen Dank im voraus.
Gruß Karsten
Antwort 4 von kvtv vom 13.06.2021, 10:00 Options
Hallo Ihr guten Geister dieses Forums,
habe gerade bemerkt das mir beim hochladen ein Fehler bei der Datei passiert ist. Hier nun der Link zur richtigen:
http://www.siteupload.de/p967191-Zufallsgenerator4Forumzip.htmlIch hoffe, das damit nicht zu viel Verwirrung gestifftet habe!
Sorry.
Bitte helft mir bei meinem Problem!
Vielen Dank im voraus.
Gruß
Karsten
Antwort 5 von kvtv vom 16.06.2021, 10:59 Options
Hallo,
kann mir denn wirklich keiner helfen???
Vielen Dank für Eure Bemühungen im voraus.
Gruß Karsten
Antwort 6 von kvtv vom 17.06.2021, 17:50 Options
Hallo,
sollte dies hier das erste mal sein das mir keiner helfen kann.
:-(
LG Karsten
Antwort 7 von rainberg vom 17.06.2021, 18:02 Options
Hallo Karsten,
vielleicht geht es anderen auch so wie mir.
Ich jedenfalls, kann mir trotz Beispielmappe nicht erklären, was da konkret ablaufen soll.
Versuch's doch mal mit einer unmissverständlichen Erklärung.
Gruß
Rainer
Antwort 8 von kvtv vom 19.06.2021, 14:41 Options
Hallo Rainer,
danke das Du mich nicht verlassen hast.
Also:
Dieser Zufallsgenerator ist nichts anderes wie eine Verlosungsmaschine. Unsere Kunden sollen einen Flyer bekommen wo sagen wir mal ein Scancode (Strichcode- EAN) abgedruckt ist. Dieser Kunde kommt nun zu uns und möchte schauen was er gewonnen hat. Wir scannen den Code ab (in Tabellenblatt Eingabe) und nun soll per Zufall entschieden werden welchen der 6 Gewinne (in Tabellenblatt Gewinne) er gewonnen hat. Angezeigt wird dies im Tabellenblatt 3 und wird mit dem Löschen button wieder zur nächsten Ziehung vorbereitet. Das soll nun so geschehen, das Excel ,das nach der Menge der Gewinne in spalte C Tabellenblatt Gewinne veranlasst. Soll heißen der Trostpreis ist 200 mal da muß also prozentual mehr gezogen werden wie der Hauptpreis mit 5 Stück. Bei jeder Ziehung des einzelnen Gewinnes, soll dessen Menge um eins reduziert werden. Wenn die Menge auf null ist soll dieser Preis nicht mehr bei der Ziehung berücksichtigt werden. Das mit der Ziehung klappt ja eigentlich schon das mit der Reduzierung um eins klappt halbwegs (jedenfalls wenn die Preise immer diesen Namen behalten, ansonsten klappt es nicht. Die Gewinne sollen aber austauschbar vom Namen her sein). Das mit der prozentualen Häufigkeit in Abhängikeit der Gewinnmenge in Spalte C vom Blatt Gewinne klappt überhaupt nicht. Bitte helft mir ich verzweifele ander Aufgabe. Ach übrigens habe vergessen alle nicht benötigten Maros zu löschen. Sorry.
Trotzdem schon mal vielen lieben Dank für die Mühe die Ihr Euch gebt. Habt Ihr noch fragen bitte stellt sie da ja sonst nicht geholfen bekommen kann. Danke nochmals.
LG Karsten
Antwort 9 von rainberg vom 19.06.2021, 15:41 Options
Hallo Karsten,
wäre diese Info gleich zu Anfang von Dir gekommen, hätte ich Dich bereits da verstanden:-)
Da ich mich aber in der Hauptsache um Formeln kümmere, muss ich Dich nun doch verlassen und überlasse Dein Problem einem/r VBA-Mann/Frau.
Zur Not würde ich es auch hinkriegen, aber warum schinden, wenn es ein anderer aus dem Handgelenk schüttelt :-)
Gruß
Rainer
Antwort 10 von kvtv vom 19.06.2021, 18:08 Options
Hallo Rainer,
danke trotzdem erstmal für deine Bemühungen.
LG Karsten
Antwort 11 von kvtv vom 20.06.2021, 09:58 Options
Hallo,
kann mir denn jetzt auch ein/e VBA Frau/Mann helfen.
Biiiiiitte
LG Karsten
Antwort 12 von kvtv vom 21.06.2021, 18:45 Options
Hallo Ihr guten Geister dieses Forums,
sind denn schon alle im Urlaub oder ist das jetzt zu schwierig :-)
Bitte, bitte helft mir doch. Antwort 4 ist der Link zur Musterdatei und Antwort 8 ist noch mal eine ausführliche beschreibung. Wenn noch eine Frage offen ist und geklärt werden muß bitte einfach fragen. Ich möchte doch geholfen bekommen.
Vielen Dank im voraus.
LG Karsten
Antwort 13 von nighty vom 22.06.2021, 16:20 Options
hi all :-))
statt artikelanzahl mit stueckzahlenangaben,wuerde ich es so machen
bei 200 soundso,auch 200 zeilen und nicht nur eine
nach diesem prinzip ist folgendes makro,das einen gewinn zieht und dann loescht
Sub Zufall01()
Randomize Timer
Dim WertZufall As Long
WertZufall = Int(Rnd * Worksheets("Gewinne").Cells(Rows.Count, 1).End(xlUp).Row) + 1
Worksheets("Gewinne").Rows(WertZufall).Delete Shift:=xlUp
End Sub
somit hast du auch den mengen entsprechende zufallsverteilung
allerding konnte ich mit deinen losnummern und dessen verfahrensweisen nichts anfangen
Antwort 14 von kvtv vom 22.06.2021, 18:57 Options
hallo nighty,
vielen Dank für Deine Antwort,
die losnummern sind für die verlosung eigendlich nicht notwendig. wenn du es mal ausprobiert hast geht es mit jeder Zahl. die nummern sind nur für mich wichtig wegen bestellung dieser, verwaltung und buchführung. Wo baue ich den dieses Makro ein. Benutze ich das Makro aus meiner Tabelle dafür nicht mehr. wie übertrage ich denn aus einem einfachen Tabellenblatt nennen wir es einfach Daten die Gewinne anhand der Anzahl der in Spalte C angegebenen Menge in das Tabellenblatt "Gewinne" 200 mal Trostpreis, 5 mal Hauptgewinn...... in einzelne Zeilen. Geht sowas mit Button? Soll auch für den Azubi so einfach sein wie möglich. Namen eingeben, Nummer eingeben, Menge eingeben und Button drücken und alles steht in dem Tabellenblatt " Gewinne und zwar von A1:C......... beginnend. Durch das Makro gezogener Gewinn soll dann in Tabellenblatt3 A1 angezeigt werden . Hilfst Du mir dabei?
Vielen Dank im voraus für Deine Hilfe
LG Karsten
Antwort 15 von nighty vom 22.06.2021, 21:09 Options
hi karsten :-)
du hast post
gruss nighty
Antwort 16 von nighty vom 23.06.2021, 15:01 OptionsLösung
hi all :-)
als ansatz dienten diese makros
gruss nighty
MappenAufbau
WorkSheets("Eingabe")
WorkSheets("Gewinne")
WorkSheets("Ausgabe")
WorkSheets("Eingabe")
SpalteA=Anzahl
SpalteB=Artikel
Sollten alle daten eingetragen sein
makro NeueGewinne starten
man landet nun auf der tabelle
WorkSheets("Ausgabe")
hier das Makro GewinnZiehen starten
Option Explicit
Sub GewinnZiehen()
Randomize Timer
Dim WertZufall As Long
Dim Zeile As Long
Zeile = Worksheets("Gewinne").Cells(Rows.Count, 1).End(xlUp).Row - 1
If Zeile > 0 Then
WertZufall = Int(Rnd * Zeile) + 2
Worksheets("Ausgabe").Cells(2, 1) = Worksheets("Gewinne").Cells(WertZufall, 1)
Worksheets("Ausgabe").Cells(2, 2) = Worksheets("Gewinne").Cells(WertZufall, 2)
Worksheets("Gewinne").Rows(WertZufall).Delete Shift:=xlUp
Else
Worksheets("Ausgabe").Cells(2, 1) = "Gewinne alle"
Worksheets("Ausgabe").Cells(2, 2) = ""
End If
End Sub
Sub NeueGewinne()
Dim Zeile As Long
Dim ZeilenDurchLauf As Long
Worksheets("Gewinne").Range("A2:IV65535") = ""
For ZeilenDurchLauf = 2 To Worksheets("Eingabe").Cells(Rows.Count, 1).End(xlUp).Row
Zeile = Worksheets("Gewinne").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Gewinne").Range(Worksheets("Gewinne").Cells(Zeile + 1, 1), Worksheets("Gewinne").Cells(Zeile + Worksheets("Eingabe").Cells(ZeilenDurchLauf, 1), 1)) = _
Worksheets("Eingabe").Cells(ZeilenDurchLauf, 2)
Worksheets("Gewinne").Range(Worksheets("Gewinne").Cells(Zeile + 1, 2), Worksheets("Gewinne").Cells(Zeile + Worksheets("Eingabe").Cells(ZeilenDurchLauf, 1), 2)) = _
Worksheets("Eingabe").Cells(ZeilenDurchLauf, 3)
Next ZeilenDurchLauf
Worksheets("Ausgabe").Range("A2:B2") = ""
Worksheets("Ausgabe").Activate
End Sub
Antwort 17 von kvtv vom 24.06.2021, 10:17 Options
Hallo Nighty,
vielen vielen dank für deine dilfe. ich denke, daß ich mit dieser Antwort von dir, es hin bekomme.
wenn noch ne frage sein sollte, darf ich dich dann noch mal kontaktieren?
Ansonsten vielen lieben dank nochmal und einen wunderschönen tag.
Gruß Karsten