online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon kvtv vom 12.06.2021, 10:07 Options

Lösung

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.html

Ich 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

Lö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

Ähnliche Themen

Bestimmte Zeilen neu zusammenführen
McZap  10.02.2008 - 64 Hits - 2 Antworten

Bestimmte Zeilen in einer Tabelle loeschen
Woga  24.04.2008 - 53 Hits - 8 Antworten

Zählenwenn: Wenn bestimmte Zeilen eine bestimmte Hintergrundfarbe haben?
Wolfine  20.05.2008 - 205 Hits - 2 Antworten

Bestimmte Zeilen drucken
flash2back  10.01.2009 - 100 Hits - 7 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026